programing

RedisCacheManager가 keyspace_misses를 업데이트하지 않음

randomtip 2023. 8. 29. 21:56
반응형

RedisCacheManager가 keyspace_misses를 업데이트하지 않음

spring-boot spring-data-redis 1.8.9를 사용하고 있습니다.릴리스 캐싱을 위한 Cache Manager의 RedisCacheManager 구현가시성을 원하는 메트릭 중 하나는 캐시 적중/실패 비율입니다.이를 위해 redis 서버를 통해 노출된 keyspace_hitskeyspace_misss를 추출하고 있습니다. 이 keyspace_misss는 redis_cli를 통해서도 볼 수 있습니다.INFO STATS문제는 RedisCacheManager가 캐시 누락을 등록하지 않는다는 것입니다. 즉, keyspace_miss는 캐시 "miss"가 있더라도 증가하지 않습니다.

코드를 디버깅하면 spring-data-redis가 실제로 키가EXISTS검색하기 전에 redis로 표시됩니다.하지만 나는 이 접근법이 의미가 있다고 생각합니다.EXISTSredis 서버에 대해 실행되며 캐시 누락을 등록하지 않습니다.

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캐시 미스로다시 한 번 주의하십시오.EXISTS코드에 따라 실행됩니다.

Redis commands executed for a cache miss

위의 명령이 실행된 후,keyspace_misses캐시 누락이 있었음에도 불구하고 증가하지 않습니다.

enter image description here

질문에 언급된 코드는 Spring에서 제공하는 RedisCache의 일부입니다.

  1. RedisCache 클래스의 사용자 정의 구현을 확장 및 생성하여 필요에 따라 "get" 메서드의 동작을 재정의합니다.
  2. RedisCacheManager를 확장하여 "createRedisCache" 메서드를 재정의하여 첫 번째 단계에서 생성한 사용자 지정 RedisCache를 기본 캐시 대신 사용합니다.

언급URL : https://stackoverflow.com/questions/50032435/rediscachemanager-not-updating-keyspace-misses

반응형