我需要用Java实现一个600s过期时间的LRU缓存。我搜索并找到了内置的LinkedHashMap类。当大小超过限制时,它可以删除最旧的元素,但没有元素的过期时间。
我能想到的是在将元素放入缓存时关联时间戳。检索元素时,请检查其时间戳;如果时间戳早于600s,则从缓存中删除该元素并返回“未找到”。
还有更好的主意吗?有内置的解决方案或最佳做法吗?我想避免重新发明轮子。
答案 0 :(得分:1)
仅使用Guava cache怎么样。
它支持these的全部
具有任何组合的LoadingCache和Cache实例的构建器 以下功能:
- 自动将条目加载到缓存中
- 超过最大大小时最近使用的逐出
- 基于时间的条目有效期,自上次访问或上次写入以来测得的值
- 键自动包装在弱引用中
- 自动包装在弱引用或软引用中的值
- 逐出(或以其他方式删除)条目的通知
- 缓存访问统计信息的累积
答案 1 :(得分:1)
我建议不要自己实现它,并查看已经可用的实现:
如果您想了解两者之间的区别,请阅读this thread in SO
我相信两者都会使您明智地使用功能。 另外,如果您使用的是Spring之类的框架,则该框架已与它们集成(较新的版本使用咖啡因,较旧的则坚持使用番石榴):