caching - Guava Cache - maximumSize - 驱逐(LRU 或最常见)

标签 caching guava

我计划在我的应用程序中使用 Guava Cache。部分 [K, V] 访问的对在统计上比其他对 >> 并且应该总是在缓存中可用。

根据 Sized Based Eviction 的规范

If your cache should not grow beyond a certain size, just use CacheBuilder.maximumSize(long). The cache will try to evict entries that haven't been used recently or very often



我想了解 经常 部分。我可以假设 - 对于 maximumSize = 100 的缓存, 如果 Key_A被访问 10000次并立即发帖说有100看跌期权,Key_A仍然会出现在缓存中?我进行的基本单元测试似乎并没有证实这一事实。有什么想法吗?
public class CacheHelper
{
    private Cache<String, String> cache;
    public CacheHelper()
    {
        cache = CacheBuilder.newBuilder().maximumSize(10).concurrencyLevel(1).build();
    }

    public String fetchVal(String key)
    {
        String val = cache.getIfPresent(key);
        return val;
    }

    public void putVal(String key, String val)
    {
        cache.put(key, val);
    }
}

测试
public class CacheTest
{
    public static void main(String[] args)
    {
        CacheHelper cacheHelper = new CacheHelper();
        cacheHelper.putVal("0", "0");
        for(int i = 0; i < 10000; i++)
        {
            cacheHelper.fetchVal("0");
        }
        System.out.println(cacheHelper.fetchVal("0"));
        for(int i = 1; i < 11; i++)
        {
            String key = "" + i;
            cacheHelper.putVal(key, key);
        }
        System.out.println(cacheHelper.fetchVal("0"));  // Still returns NULL - "most often not being used?"
    }
}

谢谢

最佳答案

根据我的轻描淡写 Guava Cache使用 LRU 作为默认驱逐策略

在您的情况下,当您添加 10 个新值时,键“0”的条目成为最旧的值,因此当缓存达到其最大大小时,最旧的值被驱逐。

关于caching - Guava Cache - maximumSize - 驱逐(LRU 或最常见),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24944252/

相关文章:

java - 如何让 Guava 的 Splitter.split 不返回不可修改的 map

java - 从 google HashMultimap 访问元素时出现问题

apache-spark - sbt 程序集着色以创建 fat jar 以在 Spark 上运行

java - Guava 多重映射到响应模型的映射结果

java - JBoss EAP 7.0standalone.xml 中设置的 Infinispan 缓存设置未反射(reflect)在应用程序中

java - 无法使用 Spring @Cacheable 和 @EnableCaching

ios - Swift 中的安全本地存储?

IIS 7.5 从响应中删除 etag header

java - L3 cpu 缓存 java 基准测试显示奇怪的结果

java ConcurrentMap 获取空值