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

发布于 2024-08-11 15:02:03 字数 231 浏览 7 评论 0原文

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

HttpRuntime.Cache.Insert(my_data, my_key);

是否有任何方法可以配置缓存,以便在应用程序域回收时保留其内容?

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

I am using ASP.NET's data caching API. For example:

HttpRuntime.Cache.Insert(my_data, my_key);

Is there any way to configure cache so its contents are preserved when the App Domain recycles?

I load many object into cache, but there is a substantial delay re-loading these every time the app domain restarts. Assume for this question that I can't prevent the appdomain restart due to a server configuration.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

最美的太阳 2024-08-18 15:02:03

有什么办法可以配置缓存吗

应用程序域回收?

不会。Cache 对象在 RAM 中保存引用。时期。

替代方案:

  1. 进程外会话状态(尽管这是针对每个用户的)
  2. 分布式缓存
  3. 使用 SQL Server 作为缓存(它将数据保存在内存中,而不是磁盘上)
  4. 在 Web 层将对象写入磁盘

我通常更喜欢 # 3 我自己,尽管有些情况其他人也合适。

Is there any way to configure cache so
its contents are preserved when the
App Domain recycles?

No. The Cache object holds references in RAM. Period.

Alternatives:

  1. Out-of-process Session state (although that's per-user)
  2. Distributed cache
  3. Use SQL Server as a cache (where it keeps data in memory, rather than on disk)
  4. Write the objects to disk at the web tier

I generally prefer #3 myself, although there are scenarios where the others are appropriate.

树深时见影 2024-08-18 15:02:03

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

Recycling the appdomain dumps the cache. If you want to get around this you'd need to use a distributed cache. Here's an example.

七七 2024-08-18 15:02:03

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

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

For your most expensive data you can cache the objects with a distributed cache such as Memcached or velocity. Depending on the size of the object and the length of runtime you could also serialize it to disk or to your database provided that the access speed to these resources is less than the time to create the object.

Now since the in-proc cache is super fast compared to any other solution since it just holds a reference to the memory object you will want to use it where possible. You can keep a copy of your cached object on disk until it is lost and then re-create it from that and place it in memory. Where this is tricky is when you have to expire the data so only use the cache/disk/sql combo where you won't need to expire/invalidate the data otherwise you will need to ensure that you clear both. This will also get around not being able to implement distributed caching on a shared server for example.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文