0
嘿一切都让使用谷歌的CacheBuilder /的CacheLoader:番石榴CacheBuilder和存储密钥不同于查找键
CacheBuilder.newBuilder().maximumSize(MAX_SIZE).expireAfterAccess()
.build(new CacheLoader<String, Object>() {
@Override
public Object load(String key) throws Exception {
return Query(key);
}
});
漂亮的直线前进。事情是关键用于查询加载时不在缓存中,实际上可能很大。我想实际上将密钥的散列存储在缓存中,因此当缓存中的查找实际完成时,它将使用密钥的散列,但是当加载完成时,密钥实际上是完整的查询。
基本上我想我的程序使用缓存通过发送查询获取函数,但只是在键查找或缓存存储之前我想知道是否有一个钩子函数我可以重写以散列最终缓存存储和查找的关键?
在此先感谢
更新:
所以我想通了使用get的可调用版本的解决方案。如果我包缓存在我自己的容器:
class WrappedCache {
private Cache<String, Object> mInnerCache;
public Object get(String key) {
String hashedKey = Hash(key); // get hashed key
return mInnerCache.get(hashedKey, new Callable<Object>() {
return Query(key);
}
}
}
这样的内部缓存只有哈希值交易,但可调用获取原始查询是否需要它来执行它的行动。
如果我需要一个更复杂的解决方案,我可以让WrappedCache
实现Cache<K,V>
接口,但我的使用情况稍微简单一些,我可以避开上面的问题。
不,番石榴对此没有支持。 –
仅供参考:Guava有一个'AbstractCache'和一个'AbstractLoadingCache',如果您选择这样做,应该有助于实现您自己的'Cache' /'LoadingCache'。 – mfulton26