0

我有一个番石榴缓存,我想弄清楚一个特定的键是否已经存在,这样我就不会覆盖它们?这可能与番石榴缓存有关吗?

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 方法返回布尔值,我可以在其中确定键是否已经存在。有没有其他方法可以确定密钥是否已经存在,这样我就不会覆盖它?

4

1 回答 1

5

您可以使用Cache.asMap()将缓存视为Map,从而公开其他功能,例如Map.put(),它返回先前映射的值:

if (cache.asMap().put(key, value) != null) {

但这仍将替换以前的值。您可能想putIfAbsent()改用:

if (cache.asMap().putIfAbsent(key, value) != null) {
于 2018-01-11T03:35:47.093 回答