5

我正在为 Spring Cache 使用 Caffeine Cache 库。有没有办法获取所有缓存的密钥?

我当前的应用程序处理近乎实时的数据,流程为:

在此处输入图像描述

Cache Updater Thread(无论用户请求如何,都以固定间隔运行)中,我需要获取当前缓存中的所有键,从 Db 获取它们的最新数据,然后用于@CachePut更新缓存。

4

2 回答 2

11

Yo 可以注入 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();
  }

}

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

于 2020-01-28T06:38:38.957 回答
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();
}
于 2021-07-31T20:22:56.383 回答