是否存在 Java Map 缓存数据结构? [关闭]

Posted

技术标签:

【中文标题】是否存在 Java Map 缓存数据结构? [关闭]【英文标题】:Exists a Java Map cache data structure? [closed] 【发布时间】:2022-01-10 10:59:17 【问题描述】:

我需要在我的 java 应用程序中处理一个缓存地图。 这是地图是一个不断增长的结构,我需要一些方法来删除地图中一段时间​​不使用的旧对象。

是否有任何现有的 Java 地图结构可以实现此逻辑,定义地图中对象的最大生命周期或实现此地图的一些通用库? 我正在使用 Java8 和 Java-Commons 库。

【问题讨论】:

看看 Google Guava Cache 的实现! 【参考方案1】:

如果您可以添加外部库,您可以使用guava 或Caffeine

另一种选择是让守护线程定期唤醒并删除未触及的对象,但我认为使用现有库更好。

【讨论】:

【参考方案2】:

您可以将LinkedHashMap 扩展为 LRU 缓存。

static class LRUCache<K, V> extends LinkedHashMap<K, V> 
    private int maxSize;

    private LRUCache(int maxSize) 
        super(maxSize, 0.75f, true);
        this.maxSize = maxSize;
    

    @Override
    protected boolean removeEldestEntry(Map.Entry<K, V> eldest) 
        return size() > maxSize;
    


public static void main(String[] args) 
    LRUCache<Integer, Integer> cache = new LRUCache<>(2);
    cache.put(1, 1);
    cache.put(2, 2);
    cache.get(1);
    cache.put(3, 3);
    cache.get(1);
    cache.put(4, 4);
    cache.get(1);
    cache.put(5, 5);
    System.out.println(cache);

输出:

1=1, 5=5

您可以在removeEldestEntry() 中实施删除策略。

【讨论】:

以上是关于是否存在 Java Map 缓存数据结构? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

从 Bitmap 到布隆过滤器,再到高并发缓存设计策略!

高并发缓存设计策略

java jdis 可以缓存map 吗

ehcache如何判断缓存数据是否存在--isKeyInCache

java 多种判断key是否在map中存在的方法

Java三大框架之——Hibernate中的三种数据持久状态和缓存机制