Caching 未从内存加载缓存

Caching 未从内存加载缓存,caching,caffeine,Caching,Caffeine,我们使用咖啡因来缓存。设置似乎很简单。我们按照以下方式设置缓存 LoadingCache<Triple<Long, Long, Long>, Result> cache = Caffeine.newBuilder() .maximumSize(1000) .refreshAfterWrite(240, TimeUnit.MINUTES) .build(new CacheDataLoader());

我们使用咖啡因来缓存。设置似乎很简单。我们按照以下方式设置缓存

LoadingCache<Triple<Long, Long, Long>, Result> cache = Caffeine.newBuilder()
            .maximumSize(1000)
            .refreshAfterWrite(240, TimeUnit.MINUTES)
            .build(new CacheDataLoader());

public class CacheDataLoader implements CacheLoader<Triple<Long, Long, Long>, Result>  {
    @Override
    public Result load(@Nonnull Triple<Long, Long, Long> id) throws Exception 
    {
      -------
    }

    @Override
    public Result reload(@Nonnull Triple<Long, Long, Long> id, @Nonnull Result oldValue) throws Exception {
       ---------
    }
}
LoadingCache=caffee.newBuilder()
.最大尺寸(1000)
.refreshAfterWrite(240,时间单位:分钟)
.build(新的CacheDataLoader());
公共类CacheDataLoader实现CacheLoader{
@凌驾
公共结果加载(@Nonnull Triple id)引发异常
{
-------
}
@凌驾
公共结果重新加载(@Nonnull-Triple-id,@Nonnull-Result-oldValue)引发异常{
---------
}
}
当我们执行
cache.get(id)
时,它总是触发
CacheDataLoader
中的
load
函数,该函数将从数据库加载。因此,永远不会从内存中提取数据。根据文档,仅当请求的钥匙不在内存中时才应触发加载。这不对吗?我们如何配置缓存有什么问题吗

任何见解都值得赞赏


谢谢。

这通常是因为缓存键缺少好的equals和hashCode方法。你能查一下吗?@BenManes谢谢你的回复。这是我最初的预感,因为我们使用Triple,所以我将它改为String,并且仍然具有相同的行为。您可以提供一个测试用例吗?其他可能性是键不是以可重复的方式生成的,weakKeys是启用的,或者结果是null(不可计算)。如果你能提供一个可重复的测试来帮助识别问题,这通常是因为缓存键缺少好的equals和hashCode方法。你能查一下吗?@BenManes谢谢你的回复。这是我最初的预感,因为我们使用Triple,所以我将它改为String,并且仍然具有相同的行为。您可以提供一个测试用例吗?其他可能性是键不是以可重复的方式生成的,weakKeys是启用的,或者结果是null(不可计算)。如果你能提供一个可重复的测试,这将有助于确定问题。