问题描述
我正在维护一个键值缓存,两者都是字符串。每个条目都有自己的到期时间。所以我有下面的工作代码,只要请求任何过期的密钥,它就会重新加载数据。 由于在我的情况下加载数据非常耗时并且来自外部服务,因此我认为每当到期时间过去时都需要立即在后台重新加载数据。所以当一个获取值的请求在过期后到来时,缓存中已经有一个刷新的数据。
我正在使用 Java 8,所以听说咖啡因调度程序可能无法正常工作。如果你有一个演示和任何例子,我可以在有或没有调度程序的情况下最好地实现这一点,那就太好了。 建议使用不同的缓存框架 - 也欢迎。
我当前的代码会在一段时间后使条目过期,但仅在请求数据并将外部服务调用时间加到 get 方法时才会重新加载。
caffeine.newBuilder().maximumSize(maxSize).recordStats().expireAfter(new Expiry<String,String>()
{
@Override
public long expireAfterCreate(@NonNull String key,@NonNull String value,long currentTime)
{
long expiresInSec = //decide expiry time for each entry and return with some buffer;
return TimeUnit.SECONDS.toNanos(expiresInSec - 5);
}
@Override
public long expireAfterUpdate(@NonNull String key,long currentTime,@NonNegative long currentDuration)
{
return currentDuration;
}
@Override
public long expireAfterRead(@NonNull String key,@NonNegative long currentDuration)
{
return currentDuration;
}
}).build();
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)