我已经构建了一个很好的小类来充当缓存。每一项都有一个过期的TimeSpan或DateTime。每次尝试访问缓存中的项时,都会检查该项的过期时间,如果过期,则从缓存中删除该项,并且不返回任何内容。
这对于频繁访问的对象来说是很棒的,但是如果一个项目被放到缓存中,并且再也不会被访问,那么它就永远不会被删除,即使它已经过期了。
让缓存中的这些项过期的好方法是什么?
我是否应该有一个后台线程无限地枚举缓存中的每一项,以检查它是否过期?
发布于 2008-09-26 11:41:41
根据我的经验,维护自定义缓存机制变得比它的价值更麻烦。有几个库已经解决了这些问题。我建议使用其中的一个。在.Net中一个流行的是企业库,尽管我对它的缓存能力的经验有限。
如果您必须使用自定义缓存机制,那么我认为您建议的监视线程的想法没有问题。也就是说,如果您的应用程序是基于服务器的应用程序,而不是web应用程序。如果它是一个web应用程序,那么你已经内置了滑动过期。然后,您可以将其包装在强类型包装器中,以避免每次都通过键引用缓存项。
发布于 2008-09-26 13:36:23
最好的代码是没有代码。请改用ASP.NET缓存。您可以在任何应用程序中将其引用为System.Web.HttpRuntime.Cache,而不仅仅是web应用程序。
发布于 2008-09-26 11:37:05
你可以实现一个最近最少使用的策略,保持你的项目按访问时间排序,当一个新的项目被插入到缓存中并且缓存已满时, the cache is 你就会清除列表中最后的项目。请参阅维基百科上的Cache algorithms。
如果你想立即过期,我仍然只会在访问时才这么做。也就是说,当缓存对象被访问并且它的时间已经过期时,重新获取它。
https://stackoverflow.com/questions/141452
复制