如何获取并查看Java Spring Cache中的全部缓存数据
查看Spring Cache(Caffeine实现)全部缓存数据的方案
Spring Cache的顶层Cache接口并未提供直接获取所有缓存条目的方法,但Caffeine作为具体实现,支持通过底层实例访问全部缓存数据,具体实现步骤如下:
实现步骤
- 先将Spring Cache返回的
Cache实例强转为CaffeineCache(需先判断类型避免转换异常) - 通过
CaffeineCache的getNativeCache()方法获取底层的Caffeine原生缓存实例 - 调用原生缓存的
asMap()方法获取缓存的实时视图,进而遍历所有键值对
代码示例
在你的CacheFilter中可以这样实现:
@Override public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) { Cache cache = cacheManager.getCache("hr"); if (cache instanceof CaffeineCache caffeineCache) { // 获取Caffeine原生缓存实例 com.github.benmanes.caffeine.cache.Cache<Object, Object> nativeCaffeineCache = caffeineCache.getNativeCache(); // 遍历所有缓存条目 nativeCaffeineCache.asMap().forEach((cacheKey, cacheValue) -> { // 根据需求处理缓存数据,比如打印日志、收集到集合中 System.out.println("缓存键:" + cacheKey + ",缓存值:" + cacheValue); }); } // 继续执行网关过滤链逻辑 return chain.filter(exchange); }
注意事项
asMap()返回的是缓存的实时视图,会同步反映缓存的新增、过期或删除操作- 若缓存条目数量极大,遍历操作可能影响系统性能,建议仅在调试、监控场景使用
- 确保项目已正确引入Caffeine依赖,否则无法识别
CaffeineCache及原生缓存类
内容的提问来源于stack exchange,提问作者Renzo Redoran
相关产品推荐
相关产品推荐

