ASP.NET数据缓存 - 在应用程序域重新启动后保留内容

时间:2009-11-19 21:19:44

标签: asp.net iis caching appdomain

我正在使用ASP.NET的数据缓存API。例如:

HttpRuntime.Cache.Insert(my_data, my_key);

有没有办法配置缓存,以便在App Domain回收时保留其内容?

我将许多对象加载到缓存中,但每次应用程序域重新启动时都会重新加载这些对象。假设这个问题我无法阻止由于服务器配置而重启appdomain。

3 个答案:

答案 0 :(得分:2)

  

有没有办法配置缓存呢   它的内容保存时   App Domain回收?

没有。 Cache对象保存RAM中的引用。周期。

备选方案:

  1. 进程外会话状态(尽管是每用户)
  2. 分布式缓存
  3. 使用SQL Server作为缓存(将数据保存在内存中而不是磁盘上)
  4. 将对象写入Web层的磁盘
  5. 我自己通常更喜欢#3,尽管有些情况下其他人都适合。

答案 1 :(得分:0)

回收appdomain会转储缓存。如果你想解决这个问题,你需要使用分布式缓存。 Here就是一个例子。

答案 2 :(得分:0)

对于最昂贵的数据,您可以使用分布式缓存(如Memcached或velocity)缓存对象。根据对象的大小和运行时的长度,您还可以将其序列化为磁盘或数据库,前提是这些资源的访问速度小于创建对象的时间。

现在因为进程内缓存与任何其他解决方案相比都非常快,因为它只保存对内存对象的引用,您将尽可能使用它。您可以将缓存对象的副本保留在磁盘上,直到它丢失,然后从中重新创建并将其放入内存中。这很棘手的是当你必须使数据到期时所以只使用cache / disk / sql组合,你不需要使数据失效/无效,否则你需要确保清除这两者。例如,这也将无法在共享服务器上实现分布式缓存。