2016-08-26 2 views
0

많은 수십만 개의 키가있는 Redis 데이터베이스가 있습니다. 시간이 지남에 따라 내가 쓰고 읽은 키가 변경되어 더 이상 사용하지 않는 키가 많이 있습니다. 대부분 TTL도 없습니다.큰 redis DB에서 사용되지 않는 키의 백분율을 결정합니다.

Redis 데이터베이스에있는 키의 몇 퍼센트가 더 이상 사용되지 않는지 알고 싶습니다. 나는 hyperloglog를 사용하여 쓰여지는 키의 수의 카디널리티를 추정 할 수 있다고 생각했지만, 쓰고 읽는 모든 키에 대해 PFADD을 수행하는 것은 많은 것처럼 보입니다.

분명히하기 위해 나는 아직 아무것도 삭제하고 싶지 않다. 단지 데이터베이스에서 사용 된 키의 수에 대한 분석을하고 싶다.

답변

0

시간 창을 사용하여 데이터를 분석하고 hyperloglog을 사용하여 각 시간 창에 대한 카디널리티를 추정 할 수 있습니다.

예를 들어, 매일의 분석을 위해 hyperloglog를 사용할 수 있습니다

// for each key that has been read or written in day1 
// add it to the corresponding hyperloglog 
pfadd key-count-day1 a b 
pfadd key-count-day1 c d e 

// for each key that has been read or written in day2 
// add it to the corresponding hyperloglog 
pfadd key-count-day2 a 
pfadd key-count-day2 c 

을이 경우에, 당신은 누구의 키 hyperloglog와 DAYN활성입니다 키의 예상 수를 얻을 수 있습니다 key-count-dayN입니다.

pfcount을 사용하면 활성 키를 매일 또는 며칠 동안 얻을 수 있습니다. 이 2 건의

// number of active keys in day2: count2 
pfcount key-count-day2 

// number of active keys in day1 and day2: count-total 
pfcount key-count-day1 key-count-day2 

, 당신은 DAY2 이후 사용되지 않는 키의 비율을 계산할 수 있습니다 (count-total - count2)/count-total

0

나는 키를 반복하는 scan 명령으로 시작하고,에 object idletime 명령을 사용하십시오 각 키는 마지막으로 키가 사용 된 이후의 초 수를 수집합니다. 거기에서 원하는 통계를 생성 할 수 있습니다.

한 가지 방법은 Redis를 사용하여 키의 idletime을 점수로 사용하여 정렬 된 집합을 사용하는 것입니다. HLL에 대한 이점은 zrange 및/또는 zrevrange을 사용하여 "x 초와 y 초 전의 키를 유휴 상태로 유지"라고 말할 수 있다는 것입니다. 그런 다음 삭제, 보관 또는 TTL 설정과 같은 작업에 사용할 수 있습니다. HLL을 사용하면이 작업을 수행 할 수 없습니다.

또 다른 장점은 결과를 Redis에 저장하지 않으면 실행하면 Redis 비용이 발생한다는 것입니다. 예를 들어, 키를 액세스 할 때 추가 조작을 수행하기 위해 코드를 수정할 필요가 없습니다.

개체 유휴 시간의 정확성은 내가 기억하는 경우 약 10 초 정도입니다. 그러나 주어진 시간 프레임에서 얼마나 많은 키가 액세스되지 않았는지에 대한 아이디어를 얻으려면 잘 작동해야합니다.