我创建了一个番石榴缓存:
Cache = CacheBuilder.newBuilder()
.maximumSize(1_000_000)
.expireAfterAccess(20, TimeUnit.MINUTES)
.build();use
但是当我调用get()时找不到键.当我需要使用Arrays.equals()时,该实现似乎使用equals()查找密钥.
无论如何,有没有设置缓存以使它以这种方式工作?在内部,它似乎具有灵活性,因为比较使用的是Equivalence而不是直接的equals(),但是CacheBuilder api似乎没有办法设置Equivalence对象.
任何帮助将不胜感激.
解决方法:
如果自然相等是您唯一的解决方案(例如在HashMap中),只需将您的实例包装在可以完成工作的对象中即可! JVM对于寿命很短的对象非常有效,因此不要因只为缓存查询而创建几个小对象而烦恼.
正如@LouisWasserman所提到的,您可以使用ByteBuffer.但是您应该注意不要修改由缓存键支持的数组.
标签:caching,guava,java
来源: https://codeday.me/bug/20191027/1947422.html