RedisCacheManager가 keyspace_misses를 업데이트하지 않음
spring-boot spring-data-redis 1.8.9를 사용하고 있습니다.릴리스 캐싱을 위한 Cache Manager의 RedisCacheManager 구현가시성을 원하는 메트릭 중 하나는 캐시 적중/실패 비율입니다.이를 위해 redis 서버를 통해 노출된 keyspace_hits 및 keyspace_misss를 추출하고 있습니다. 이 keyspace_misss는 redis_cli를 통해서도 볼 수 있습니다.INFO STATS
문제는 RedisCacheManager가 캐시 누락을 등록하지 않는다는 것입니다. 즉, keyspace_miss는 캐시 "miss"가 있더라도 증가하지 않습니다.
코드를 디버깅하면 spring-data-redis가 실제로 키가EXISTS
검색하기 전에 redis로 표시됩니다.하지만 나는 이 접근법이 의미가 있다고 생각합니다.EXISTS
redis 서버에 대해 실행되며 캐시 누락을 등록하지 않습니다.
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
코드에 따라 실행됩니다.
위의 명령이 실행된 후,keyspace_misses
캐시 누락이 있었음에도 불구하고 증가하지 않습니다.
질문에 언급된 코드는 Spring에서 제공하는 RedisCache의 일부입니다.
- RedisCache 클래스의 사용자 정의 구현을 확장 및 생성하여 필요에 따라 "get" 메서드의 동작을 재정의합니다.
- RedisCacheManager를 확장하여 "createRedisCache" 메서드를 재정의하여 첫 번째 단계에서 생성한 사용자 지정 RedisCache를 기본 캐시 대신 사용합니다.
언급URL : https://stackoverflow.com/questions/50032435/rediscachemanager-not-updating-keyspace-misses
'programing' 카테고리의 다른 글
jQuery: 외부 JS가 페이지 하단에 있는 경우 document.ready를 사용하는 이유는 무엇입니까? (0) | 2023.08.29 |
---|---|
"'블럽'을 구성하지 못했습니다.파일을 다운로드할 때 제공된 값을 시퀀스 "로 변환할 수 없습니다. (0) | 2023.08.29 |
Ubuntu 20.04에서 MariaDB 프로비저닝 (0) | 2023.08.29 |
requests.get()이 반환되지 않는 이유는 무엇입니까?requests.get()에서 사용하는 기본 시간 제한은 무엇입니까? (0) | 2023.08.29 |
express 4.0에서 'extended'는 무엇을 의미합니까? (0) | 2023.08.09 |