你是否知道在给定超时后会自动清除条目的Java Map或类似标准数据存储?这意味着老化,旧的过期条目会自动“老化”。
最好在可通过Maven访问的开源库中?
我知道自己实现该功能的方法,并且过去已经做过几次,所以我并不是在这方面寻求建议,而是寻求指向一个好的参考实现的指针。
像WeakHashMap这样的基于WeakReference的解决方案不是一个选择,因为我的密钥很可能是非interintern字符串,并且我希望可配置的超时时间不依赖于垃圾回收器。
我也不想依靠Ehcache,因为它需要外部配置文件。我正在寻找仅代码解决方案。
是。Google Collections或Guava的名称现在有了一个叫做MapMaker的东西,可以做到这一点。
ConcurrentMap<Key, Graph> graphs = new MapMaker()
.concurrencyLevel(4)
.softKeys()
.weakValues()
.maximumSize(10000)
.expiration(10, TimeUnit.MINUTES)
.makeComputingMap(
new Function<Key, Graph>() {
public Graph apply(Key key) {
return createExpensiveGraph(key);
}
});
更新:
从guava 10.0(2011年9月28日发布)开始,许多MapMaker方法已被弃用,以支持新的CacheBuilder:
LoadingCache<Key, Graph> graphs = CacheBuilder.newBuilder()
.maximumSize(10000)
.expireAfterWrite(10, TimeUnit.MINUTES)
.build(
new CacheLoader<Key, Graph>() {
public Graph load(Key key) throws AnyException {
return createExpensiveGraph(key);
}
});
原始关闭原因未解决 你们知道Java Map或类似的标准数据存储在给定的超时后自动清除条目吗?这意味着老化,旧的过期条目会自动“老化”。 最好是在可以通过Maven访问的开源库中? 我知道自己实现功能的方法,并且在过去已经做了几次,所以我不是在征求这方面的建议,而是寻求一个好的参考实现的指针。 基于WeakReference的解决方案(如WeakHashMap)不是一个选项,因为我的密钥可能是非内
问题内容: 我的代码如下所示: 它的作用是,将键值存储23小时。但是,有什么方法可以设置密钥在晚上11:59 pm过期? 问题答案: Redis本身不提供此功能。但是您可以计算直到午夜的秒数。
问题内容: 当生存时间达到0时,我的Redis服务器不会删除密钥。 这是一个示例代码: 如果我通过redis检查信息返回,它说0个密钥已过期。 任何想法? 谢谢。 问题答案: 由于您正在执行“ …”,因此很难确定,但是我要说的是您在该部分设置了mykey,这将有效地消除过期。 从EXPIRE手册 仅当使用DEL命令删除密钥或使用SET或GETSET命令覆盖密钥时,才清除超时 另外,关于TTL的-1
这是我的密码 抱歉,如果我的代码一团糟。
我想创建一个像下面这样的地图- 我有一张物品清单- 这里Pair是一个类,已经在我的项目中,所以我想使用它。 我需要帮助从Java8流创建它。 我试过了: 但我犯了个错误。我刚刚接触Java 8,正在努力学习它。 添加一个示例: 我有一个
问题内容: 当我的密钥在Redis数据存储区中过期时,我正在尝试使用Redis实施过期密钥通知。redis网站提供了一些有关http://redis.io/topics/notifications的描述,但是我无法找到任何示例,例如使用Jedis的redis java客户端如何做到这一点? 任何可能的带有插图的代码都将非常有用,因为它们是redis的新功能。 问题答案: 您只能使用 pub-sub