java - 设计具有可变条目到期时间的 Guava LoadingCache

标签 java multithreading guava

我在我的项目中使用 Guava 的 LoadingCache 来处理线程{安全、友好}的缓存加载,它工作得非常好。但是,有一个限制。

当前定义缓存的代码如下所示:

cache = CacheBuilder.newBuilder().maximumSize(100L).build(new CacheLoader<K, V>()
{
    // load() method implemented here
}

我没有指定到期时间。

问题是根据键的值,一些关联的值可能会过期,而另一些可能不会。而 CacheLoader 没有考虑到这一点,如果你指定一个过期时间,它是针对每一个条目的。

你会如何解决这个问题?

最佳答案

另一种选择是我的ExpiringMap (我是作者),支持变量条目过期:

Map<String, String> map = ExpiringMap.builder().variableExpiration().build();
map.put("foo", "bar", ExpirationPolicy.ACCESSED, 5, TimeUnit.MINUTES);
map.put("baz", "pez", ExpirationPolicy.CREATED, 10, TimeUnit.MINUTES);

关于java - 设计具有可变条目到期时间的 Guava LoadingCache,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13979376/

相关文章:

C++ `Timer` 类实现

c# - 使用 Windbg 在内存转储中查找调用的目标线程

java - Java Applet 中的 NoClassDefFoundError on invokeLater()

java - 使用 Guava 将两个列表压缩到 Java 8 中的不可变多重映射中?

java - 如何向启动画面添加动画?

java - 获取执行路径 - 从我启动 jar 文件的位置

java - JNI,在 jobect 和 jthrowable 之间转换

java - 通过删除生成所有可能的排列

java - 为什么常见的 Map 实现不为 Map.get() 缓存 Map.containsKey() 的结果

java - Constants.java 中未定义的构造函数