有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Java中具有LRU缓存的线程安全集合

我正在用Java编写一个处理文件的多线程RabbitMQ客户机。但是,我确实需要一个快速而大的缓存池,主要是一个只读的地图列表。数据将根据请求从SQL server中提取,但我也希望缓存内置LRU算法

我发现了一个半功能站点http://cacheonix.org,它似乎提供了我想要的东西,但是下载页面不能正常工作

你有什么提示吗

我认为LinkedHashMap与LRU缓存机制/包装器相结合可以满足我的大多数使用,但我首先要问。 https://docs.oracle.com/javase/6/docs/api/java/util/LinkedHashMap.html


共 (1) 个答案

  1. # 1 楼答案

    如果你想用LRU实现缓存,LinkedHashMap可能是一个选择

    LinkedHashMap允许使用插入顺序或访问顺序(默认为插入顺序)访问元素,这是由一个双链接列表维护的

    对于访问顺序,在执行获取或放置的访问操作时,被访问的元素将被删除到双链表的尾部

    更重要的是,LinkedHashMap使用如下受保护的方法,可以对其进行扩展,并自定义您自己的删除最老元素的策略

    protected boolean removeEldestEntry(Map.Entry<K,V> eldest) {
            return false;
    }
    

    通过访问顺序和删除最老元素的能力,您可以使用LRU实现自己的缓存

    顺便说一句,LinkedHashMap不是线程安全的,但是,您可以实现自己的线程安全getter/setter