当前位置: 首页 > 面试题库 >

在Java中易于使用的LRU缓存

梁丘柏
2023-03-14
问题内容

我知道实现起来很简单,但是我想重用已经存在的东西。

我要解决的问题是我为不同的页面,角色加载了配置(从XML,所以我想缓存它们),因此输入的组合可以增长很多(但99%的增长)。为了处理这个1%,我想在缓存中设置一些最大项目…

直到我在apache commons中找到了org.apache.commons.collections.map.LRUMap,它看起来还不错,但还想检查其他内容。有什么建议吗?


问题答案:

您可以使用LinkedHashMap(Java 1.4+):

// Create cache
final int MAX_ENTRIES = 100;
Map cache = new LinkedHashMap(MAX_ENTRIES+1, .75F, true) {
    // This method is called just after a new entry has been added
    public boolean removeEldestEntry(Map.Entry eldest) {
        return size() > MAX_ENTRIES;
    }
};

// Add to cache
Object key = "key";
cache.put(key, object);

// Get object
Object o = cache.get(key);
if (o == null && !cache.containsKey(key)) {
    // Object not in cache. If null is not a possible value in the cache,
    // the call to cache.contains(key) is not needed
}

// If the cache is to be used by multiple threads,
// the cache must be wrapped with code to synchronize the methods
cache = (Map)Collections.synchronizedMap(cache);


 类似资料:
  • 问题内容: 我知道实现起来很简单,但是我想重用已经存在的东西。 我要解决的问题是,我为不同的页面,角色加载了配置(从XML,所以我想缓存它们),因此输入的组合可以增长很多(但99%的增长)。为了处理这一1%,我想在缓存中设置一些最大项目… 直到我在apache commons中找到了org.apache.commons.collections.map.LRUMap,它看起来还不错,但还想检查一下其

  • 问题内容: 不要说EHCache或OSCache等。出于这个问题的目的,假设我想仅使用SDK实现自己的实现(边做边学)。考虑到缓存将在多线程环境中使用,你将使用哪些数据结构?我已经使用LinkedHashMap和Collections#synchronizedMap实现了一个,但是我很好奇是否有任何新的并发集合会更好。 更新:当我发现这个块时,我只是在阅读Yegge的最新文章: 如果你需要固定时间

  • 问题内容: 我试图使用LinkedHashMap实现LRU缓存。在LinkedHashMap的文档(http://docs.oracle.com/javase/7/docs/api/java/util/LinkedHashMap.html)中,它表示: 请注意,如果将密钥重新插入到映射中,则插入顺序不会受到影响。 但是当我做以下推 输出是 这表明重新插入确实影响了订单。有人知道任何解释吗? 问题答

  • 问题内容: 我有postgres 9.3 db,我想使用Redis来缓存对数据库的调用(基本上像memcached一样)。我遵循了这些文档,这意味着我已经基本配置了redis以用作LRU缓存。但是不确定下一步该怎么做。如何告诉Redis跟踪对数据库的调用并缓存其输出?我怎么知道它正在工作? 问题答案: 用伪代码: 这可能必须是您正在使用的查询引擎的自定义适配器。

  • 本文向大家介绍详解Java实现LRU缓存,包括了详解Java实现LRU缓存的使用技巧和注意事项,需要的朋友参考一下 LRU是Least Recently Used 的缩写,翻译过来就是“最近最少使用”,LRU缓存就是使用这种原理实现,简单的说就是缓存一定量的数据,当超过设定的阈值时就把一些过期的数据删除掉,比如我们缓存10000条数据,当数据小于10000时可以随意添加,当超过10000时就需要把

  • 本文向大家介绍Java实现LRU缓存的实例详解,包括了Java实现LRU缓存的实例详解的使用技巧和注意事项,需要的朋友参考一下 Java实现LRU缓存的实例详解 1.Cache Cache对于代码系统的加速与优化具有极大的作用,对于码农来说是一个很熟悉的概念。可以说,你在内存中new 了一个一段空间(比方说数组,list)存放一些冗余的结果数据,并利用这些数据完成了以空间换时间的优化目的,你就已经