Spring Boot缓存中的咖啡因缓存:获取所有已缓存键。

6
我是使用Spring Cache的Caffeine缓存库。有没有一种方法可以获取所有缓存的键?
我的当前应用程序在近实时数据上运行,其流程如下:

enter image description here

在“缓存更新线程”中(该线程以固定间隔运行,与用户请求无关),我需要获取当前缓存中的所有键,从数据库中获取它们的最新数据,然后使用@CachePut更新缓存。

你能否给我提供一个好的实现示例作为参考?我正在着手实现相同的功能。 - Einstein_AB
你好 @Einstein_AB,我建议你阅读Spring缓存文档。如果你特别使用Caffeine缓存,可以参考这个例子。 - imAmanRana
2个回答

13

您可以注入CacheManager并从中获取本机缓存。

@AllArgsConstructor
class Test {
  private CacheManager cacheManager;

  Set<Object> keys(String cacheName){
    CaffeineCache caffeineCache = (CaffeineCache) cacheManager.getCache(cacheName);
    com.github.benmanes.caffeine.cache.Cache<Object, Object> nativeCache = caffeineCache.getNativeCache();
    return nativeCache.asMap().keySet();
  }

}

当然,你应该添加一些类型转换检查。

1
作为此内容的后续补充。重要的是要注意,CaffeineCache实现了Cache接口,因此进行强制类型转换是自然的。任何其他实现Cache接口的缓存类型也应该可以这样转换。 - Michael Rountree

0
您可以使用asMap().keySet()方法返回键集,如下所示。
import com.github.benmanes.caffeine.cache.Cache;
import com.github.benmanes.caffeine.cache.Caffeine;

class Test{
private Cache<String,String> testCache;
Test(){
 testCache = Caffeine.newBuilder().expireAfterWrite( 3000, TimeUnit.SECONDS).build();
}
     
// return keys as a set
public Set<String> getCacheKeySet(){
return testCache.asMap().keySet();
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接