Java 刷新LRU缓存

Java 刷新LRU缓存,java,caching,linkedhashmap,lru,Java,Caching,Linkedhashmap,Lru,我正在使用从LinkedHashMap扩展的映射实现缓存(这样我就可以实现RemoveedStantry)。旧的实现使用了一个定期的哈希映射,并以设定的间隔刷新。我想知道如何保持缓存中的数据是最新的。我怀疑我能否在某个特定的时间刷新,而不会弄乱LRU的要点。在数据库中查询条目上的时间戳会特别昂贵吗?为什么不使用-没有必要重新发明轮子 我最终使用了LinkedHashMap,按访问时间排序,并对照数据库检查时间戳。这就像一种魅力,大大减少了应用程序的内存负载。或任何其他缓存。大多数人都有时间去生活

我正在使用从LinkedHashMap扩展的映射实现缓存(这样我就可以实现RemoveedStantry)。旧的实现使用了一个定期的哈希映射,并以设定的间隔刷新。我想知道如何保持缓存中的数据是最新的。我怀疑我能否在某个特定的时间刷新,而不会弄乱LRU的要点。在数据库中查询条目上的时间戳会特别昂贵吗?

为什么不使用-没有必要重新发明轮子

我最终使用了LinkedHashMap,按访问时间排序,并对照数据库检查时间戳。这就像一种魅力,大大减少了应用程序的内存负载。

或任何其他缓存。大多数人都有时间去生活,原因是这是一个非常古老的项目,没有一个原始的开发者留下来。我希望避免添加任何新的依赖项,而只是重新连接单个文件。@Bobnix。也许吧,但我认为你不应该抄近路。:)我必须同意这一点。这不仅仅是抄近路。你很可能会弄错。如果你试图重新实现它,那么你所诱发的可能的错误是不值得的。这和你不去重新实现链表、散列图、排序函数等功能的原因是一样的。Elderstentry是基于数字的,而不是基于时间的。在LRU中,您需要一个最短的生存时间——时间上的限制,长度上的限制——大小上的限制。我想知道,您打算如何使用Elderstentry实现LRU?@Nishant,我的印象是LRU只是管理被删除的内容,而不是何时。当我遇到大小限制时,我想删除最近使用最少的对象。LRU——据我所知,最近使用最少的应该删除最早的条目。换句话说,您希望删除请求频率最低的对象。现在,您的hashmap大小为100,第100个元素是最常用的元素,您想删除它吗?有两种转义(1)使用优先级队列,优先级取决于添加对象时的时间戳(2)使用LHM,但每次调用get()时,都要删除条目并重新插入映射以模仿LRU。@Nishant,LinkedHashMap构造函数之一的第三个参数是boolean accessOrder。如果设置为true,则按访问数据的时间排序。啊,好的。应该看得更深入一点——完全是一团糟的吻。无论如何,谢谢你的指点。它应该会起作用。