如何确定一个键是否存在于番石榴缓存中,这样我就不会覆盖它?
How to figure out whether a key exists in guava cache so that I don't overwrite it?
我有一个番石榴缓存,我想弄清楚某个特定的键是否已经存在,这样我就不会覆盖它们?这可能与番石榴缓存有关吗?
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");
}
看起来没有 returns 布尔值的 put 方法,我可以在其中确定键是否已经存在。有没有其他方法可以确定密钥是否已经存在,这样我就不会覆盖它?
您可以使用 Cache.asMap()
to treat your cache as a Map
, thereby exposing additional functionality such as Map.put()
,其中 returns 之前映射的值:
if (cache.asMap().put(key, value) != null) {
但这仍会替换以前的值。您可能想改用 putIfAbsent()
:
if (cache.asMap().putIfAbsent(key, value) != null) {
我有一个番石榴缓存,我想弄清楚某个特定的键是否已经存在,这样我就不会覆盖它们?这可能与番石榴缓存有关吗?
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");
}
看起来没有 returns 布尔值的 put 方法,我可以在其中确定键是否已经存在。有没有其他方法可以确定密钥是否已经存在,这样我就不会覆盖它?
您可以使用 Cache.asMap()
to treat your cache as a Map
, thereby exposing additional functionality such as Map.put()
,其中 returns 之前映射的值:
if (cache.asMap().put(key, value) != null) {
但这仍会替换以前的值。您可能想改用 putIfAbsent()
:
if (cache.asMap().putIfAbsent(key, value) != null) {