RedisCacheManager 未更新keyspace_misses
2022-09-03 08:13:15
我正在使用spring-boot spring-data-redis 1.8.9.RELEASE RedisCacheManager实现CacheManager进行缓存。我想要了解的一个指标是缓存命中/未命中比率。为了得到这一点,我正在提取keyspace_hits,keyspace_misses通过redis服务器公开,也可以通过redis_cli查看。问题在于 RedisCacheManager 从不注册缓存未命中,即即使存在缓存“未命中”,keyspace_misses也不会递增。INFO STATS
调试代码时,我看到spring-data-redis实际上在检索redis之前检查了redis中的键。我看到了这种方法的意义,但是当对redis服务器执行时,它不会注册缓存未命中。EXISTS
EXISTS
有没有办法使用RedisCacheManager并注册缓存未命中?我知道我可以使用其他redis对象来实现这一点,但我想知道是否可以使用标准的CacheManager实现来完成?
编辑
理想的解决方案不会增加大量开销,我无法编辑 redis 服务器的配置。
RedisCacheManager 在从缓存中检索元素时使用的代码。注意布尔值存在
:
public RedisCacheElement get(final RedisCacheKey cacheKey) {
Assert.notNull(cacheKey, "CacheKey must not be null!");
Boolean exists = (Boolean)this.redisOperations.execute(new RedisCallback<Boolean>() {
public Boolean doInRedis(RedisConnection connection) throws DataAccessException {
return connection.exists(cacheKey.getKeyBytes());
}
});
return !exists ? null : new RedisCacheElement(cacheKey, this.fromStoreValue(this.lookup(cacheKey)));
}
上面的代码将在缓存未命中时通过 MONITOR
查看的 redis 上执行这些命令。再次注意,EXISTS
按照以下代码执行:
执行上述命令后,即使存在缓存未命中,keyspace_misses
也不会递增: