请不要说 EHCache 或 OSCache 等。出于这个问题的目的,假设我想只使用 SDK 来实现我自己的(边做边学)。鉴于缓存将在多线程环境中使用,您将使用哪些数据结构?我已经使用LinkedHashMap和Collections#synchronizedMap实现了一个,但我很好奇是否有任何新的并发集合会是更好的候选者。
更新:当我发现这个金块时,我正在阅读Yegge 的最新消息:
如果您需要恒定时间的访问并希望维护插入顺序,那么最好的方法就是 LinkedHashMap,这是一种真正美妙的数据结构。唯一可能更精彩的方法是如果有一个并发版本。可惜。
在我使用上面提到的LinkedHashMap+实现之前,我的想法几乎完全相同。Collections#synchronizedMap很高兴知道我没有忽略一些事情。
LinkedHashMap
Collections#synchronizedMap
根据到目前为止的答案,对于高度并发的 LRU,我最好的选择是使用一些相同的逻辑来扩展ConcurrentHashMapLinkedHashMap。
如果我今天从头开始再做一次,我会使用 Guava 的CacheBuilder.
CacheBuilder