我有一个番石榴缓存,我想弄清楚一个特定的密钥是否已经存在,以便我不会覆盖它们?这可能与番石榴缓存有关吗?
private final Cache<Long, PendingMessage> cache = CacheBuilder.newBuilder()
.maximumSize(1_000_000)
.concurrencyLevel(100)
.build()
// there is no put method like this
if (cache.put(key, value) != null) {
throw new IllegalArgumentException("Message for " + key + " already in queue");
}
看起来没有put方法返回boolean,我可以知道key是否已经存在。有没有其他方法可以判断密钥是否已经存在,以便我不会覆盖它?
答案 0 :(得分:3)
您可以使用Cache.asMap()
将缓存视为Map
,从而展示其他功能,例如Map.put()
,它会返回先前映射的值:
if (cache.asMap().put(key, value) != null) {
但这仍将取代以前的价值。您可能希望使用putIfAbsent()
代替:
if (cache.asMap().putIfAbsent(key, value) != null) {