首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何从缓存中清除过期项目?

如何从缓存中清除过期项目?
EN

Stack Overflow用户
提问于 2008-09-26 19:34:09
回答 5查看 1.9K关注 0票数 3

我已经构建了一个很好的小类来充当缓存。每一项都有一个过期的TimeSpan或DateTime。每次尝试访问缓存中的项时,都会检查该项的过期时间,如果过期,则从缓存中删除该项,并且不返回任何内容。

这对于频繁访问的对象来说是很棒的,但是如果一个项目被放到缓存中,并且再也不会被访问,那么它就永远不会被删除,即使它已经过期了。

让缓存中的这些项过期的好方法是什么?

我是否应该有一个后台线程无限地枚举缓存中的每一项,以检查它是否过期?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2008-09-26 19:41:41

根据我的经验,维护自定义缓存机制变得比它的价值更麻烦。有几个库已经解决了这些问题。我建议使用其中的一个。在.Net中一个流行的是企业库,尽管我对它的缓存能力的经验有限。

如果您必须使用自定义缓存机制,那么我认为您建议的监视线程的想法没有问题。也就是说,如果您的应用程序是基于服务器的应用程序,而不是web应用程序。如果它是一个web应用程序,那么你已经内置了滑动过期。然后,您可以将其包装在强类型包装器中,以避免每次都通过键引用缓存项。

票数 1
EN

Stack Overflow用户

发布于 2008-09-26 21:36:23

最好的代码是没有代码。请改用ASP.NET缓存。您可以在任何应用程序中将其引用为System.Web.HttpRuntime.Cache,而不仅仅是web应用程序。

票数 5
EN

Stack Overflow用户

发布于 2008-09-26 19:37:05

你可以实现一个最近最少使用的策略,保持你的项目按访问时间排序,当一个新的项目被插入到缓存中并且缓存已满时, the cache is 你就会清除列表中最后的项目。请参阅维基百科上的Cache algorithms

如果你想立即过期,我仍然只会在访问时才这么做。也就是说,当缓存对象被访问并且它的时间已经过期时,重新获取它。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/141452

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档