2012-11-15 171 views
0

我正在使用HttpRuntime.Cache来存储我的网站缓存。问题是每当我想上传一个新的更新的编译版本时,该网站的缓存被删除。 我很想知道如何解决这个问题。 thx提前给所有亲爱的助手。c#asp.net MVC缓存

回答

2

缓存驻留在内存中 - 一旦您上传了新版本的站点,IIS就会回收应用程序池,这意味着内存被清除并且缓存与它一起使用。

你不能改变这是如何工作的。

您可以将缓存保存到磁盘(或数据库或其他)并读取它,但是您最好让它保持原样。

另一种方法是使用单独的缓存服务器 - 类似于完全独立于IIS的memcached

+0

memCache存在于内存中,并且适用于小数据。虽然我期望保存大量数据,因此我宁愿使用硬盘来保存数据。 –

+0

@mashtagidi - 你应该真的包含你需要缓存的数据的大小。我真的没有看到使用磁盘作为缓存的重点,因为这与任何事情一样缓慢。 – Oded

+0

“Memcached是用于任意数据(字符串,对象)的小块的内存中键值存储”。我的应用程序需要存储几个密钥,但每个键的大小并不那么大(最大的对象可以包含几千条记录的列表,但通常它是具有20-30个属性的对象)。 memcached是否适合我的需求? –

0

使用共享(或分布式)缓存可以解决您的问题。这种缓存也用于webfarm环境中,在这种环境中,多个web服务器需要访问共享缓存中的数据。

看一看AppFabric这是微软的分布式缓存implementaion(免费)

还有许多其他的缓存产品availbale像NCacheMemCachedGemFire或Oracle连贯性,仅举几例。

+0

现在我只有一个网站,而不是一个网络农场。但事情是如果我的静态数据没有被缓存,它将会很慢。 –

+0

要保留iis流程循环中的缓存值,您可以使用与webfarms相同的机制。即使你在一个盒子上运行。不管你怎样称之为“共享”,“分布式”或“进程外”缓存。将缓存从流程中取出不失为一种诀窍,可以将缓存的内容保留在回收站点上。 –