guava cache 使用KEY 的弱引用功能导致缓存无法命中的问题
guava cache maven 依赖版本
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>18.0</version>
</dependency>
直接上代码
memoryCache= CacheBuilder.newBuilder()
.maximumSize(32)
.expireAfterWrite(900, TimeUnit.SECONDS)
.weakKeys()
.weakValues().build();
调用构建器构建缓存对象时,指定缓存的key 采用 弱引用的方式,其中
weakKeys() 方法代码如下:
public CacheBuilder<K, V> weakKeys() {
return setKeyStrength(Strength.WEAK);
}
CacheBuilder<K, V> setKeyStrength(Strength strength) {
checkState(keyStrength == null, "Key strength was already set to %s", keyStrength);
keyStrength = checkNotNull(strength);
return this;
}
其中 Strength 是个枚举类型,定义如下:
enum Strength {
STRONG {
@Override
<K, V> ValueReference<K, V> referenceValue(
Segment<K, V> segment, ReferenceEntry<K, V> entry, V value, int weight) {
return (weight == 1)
? new StrongValueReference<K, V>(value)
: new WeightedStrongValueReference<K, V>(value, weight);
}
@Override
Equivalence<Object> defaultEquivalence() {
return Equivalence