小编典典

你将如何在 Java 中实现 LRU 缓存?

all

请不要说 EHCache 或 OSCache 等。出于这个问题的目的,假设我想只使用 SDK
来实现我自己的(边做边学)。鉴于缓存将在多线程环境中使用,您将使用哪些数据结构?我已经使用LinkedHashMapCollections#synchronizedMap实现了一个,但我很好奇是否有任何新的并发集合会是更好的候选者。

更新:当我发现这个金块时,我正在阅读Yegge 的最新消息:

如果您需要恒定时间的访问并希望维护插入顺序,那么最好的方法就是
LinkedHashMap,这是一种真正美妙的数据结构。唯一可能更精彩的方法是如果有一个并发版本。可惜。

在我使用上面提到的LinkedHashMap+实现之前,我的想法几乎完全相同。Collections#synchronizedMap很高兴知道我没有忽略一些事情。

根据到目前为止的答案,对于高度并发的
LRU,我最好的选择是使用一些相同的逻辑来扩展ConcurrentHashMapLinkedHashMap


阅读 196

收藏
2022-08-29

共1个答案

小编典典

如果我今天从头开始再做一次,我会使用 Guava
CacheBuilder.

2022-08-29