【问题标题】:Remove elements from Guava Cache从 Guava Cache 中删除元素
【发布时间】:2014-11-30 10:39:56
【问题描述】:

我正在使用import com.google.common.cache.Cache

我是这样启动缓存的:

private Cache<String,String> mycache =CacheBuilder.newBuilder()
   .concurrencyLevel(4).expireAfterAccess(30, TimeUnit.MINUTES).build();

在某些情况下,我愿意在等待过期之前手动删除条目。

我发现这样做的唯一方法是:

mycache.asMap().remove("somekey");

我在问这样做是否正确?我会有什么问题吗?

【问题讨论】:

  • 如果地图是真实数据的副本(以保护它)或者地图是远程和/或分布式的,这不会删除密钥。因此,请使用 API 中的 invalidate 方法。
  • @tgkprog 不符合documentation。它只是列出了从地图创建的迭代器的风险。但事实上,没有理由不使用 API 方法。
  • 如果您需要在迭代期间删除项目,请使用地图的删除方法。它必须重载才能让主缓存知道并且不会自行失败。

标签: java caching hashmap guava


【解决方案1】:

正确的做法是使用invalidate 方法:

mycache.invalidate("somekey");

API documentation中指定:

void invalidate(Object key)
丢弃键 key 的任何缓存值。

【讨论】:

    【解决方案2】:

    您应该使用invalidate(key) 方法来删​​除单个元素。对于批量删除,您可以使用invalidateAll(keys) 方法。

    在你的情况下,你可以使用

    mycache.invalidate("somekey"); 
    

    希望这能解决您的问题。

    【讨论】:

      猜你喜欢
      • 2018-05-26
      • 1970-01-01
      • 2013-05-14
      • 1970-01-01
      • 1970-01-01
      • 2013-02-14
      • 2018-01-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多