Java 中的分段 LRU 缓存

问题描述

我必须在 Java 中实现分段 LRU 缓存。无法理解哪种数据结构可以用于它,这将是有效的。我们如何将缓存分为两个部分,即试用版和保护版?

这是 SLRU 缓存驱逐政策的链接https://en.wikipedia.org/wiki/Cache_replacement_policies#Segmented_LRU_(SLRU)

谢谢!

解决方法

在 Java 中,LRU 缓存通常使用 LinkedHashMap 实现。这是一个在节点之间具有内部顺序的哈希图。

对于分段 LRU 缓存,您需要创建一个包含其中两个映射的缓存类。

对于受保护的映射,使用带有 accessOrder = true 的构造函数,这样每次访问条目时,它都会将其移动到内部排序的末尾。

您应该创建覆盖 removeEldestEntry 方法的子类,以自动使条目过期,并在必要时将它们从受保护的段移至试用段。

将缓存命中从试用映射移动到受保护映射必须由您的缓存类完成。