【发布时间】:2015-10-06 22:38:00
【问题描述】:
我创建了一个番石榴缓存:
Cache<byte[], byte[]> = CacheBuilder.newBuilder()
.maximumSize(1_000_000)
.expireAfterAccess(20, TimeUnit.MINUTES)
.build();use
但是当我调用 get() 时它没有找到密钥。该实现似乎使用 equals() 来查找密钥,当我需要它时使用 Arrays.equals()。
有没有办法设置 Cache 使其以这种方式工作?在内部,它似乎具有灵活性,因为比较使用 Equivalence 而不是直接的 equals(),但 CacheBuilder api 似乎没有设置 Equivalence 对象的方法。
任何帮助将不胜感激。
【问题讨论】:
-
我有点想知道为什么您将字节数组作为另一个字节数组的键...
-
简短回答:不,您必须将
byte[]包装在另一个对象中,并正确实现equals和hashCode。 (如果我没记错的话,ByteBuffer将在这里工作并且内置于 Java 中。) -
@LouisWasserman 为缓存添加
KeyEquality样式评估策略有什么好处吗? -
@SotiriosDelimanolis 我相信这已被考虑并被拒绝。追踪github.com/google/guava/issues/1571了解详情。
-
@LouisWasserman 用户认为他们需要的比实际需要的多得多谢谢!