上文的需求其实非常适合用guava的loadingCache来实现的,问题就是如何自定义过期逻辑呢
找了很久,发现loadingCache确实没有方式支持自定义过期逻辑。
那就这样放弃了吗。
树是死的,人是活的。我们可以间接的实现。
基本逻辑是这样的,loadingCache本身是提供了expireAfterWrite,只要我们设置个更快的定时任务,拿到数据,自定义逻辑判断是否过期,没有的话,再put回去。
再put回去就相当于重置了expire,这样就达到了我们的目的。
public static void <K, V> resetExpiration(Cache<K, V> cache, K key) {
V value = cache.get(key);
//这里加上自定义判断逻辑
if (value != null ) {
// 值没改变,但是过期时间改变了
cache.put(key, value);
}
}
网友评论