복붙노트

[REDIS] 레디 스의 정확도 명령을 dbsize

REDIS

레디 스의 정확도 명령을 dbsize

레디 스에서 dbsize 명령은 얼마나 정확합니까?

나는 dbsize에 의해 반환 된 키의 개수가 키 명령에 의해 반환되는 실제 키의 수와 일치하지 않는 것으로 확인되었습니다.

다음은 그 예이다 :

redis-cli dbsize
(integer) 3057
redis-cli keys "*" | wc -l
2072

왜 키의 실제 수보다 dbsize 훨씬 더 높다?

해결법

  1. ==============================

    1.나는 그것이 키 만료에 연결되어 말할 것입니다.

    나는 그것이 키 만료에 연결되어 말할 것입니다.

    키 / 값 레디 스 등의 저장 또는 만료 개체 당 물리적 ​​타이머를 정의 할 여유가 없다 memcached를. 그들 중 너무 많은있을 것입니다. 대신에 그들은 쉽게 항목이 만료 될 추적하고, 하나의 물리적 타이머에 대한 모든 만료 이벤트를 다중화하는 데이터 구조를 정의합니다. 또한 이러한 이벤트를 처리하는 게으른 전략을 구현하는 경향이있다.

    레디 스로, 항목이 만료 될 때 아무 일도 발생하지 않습니다. 그러나 각 항목에 액세스하기 전에 검사가 체계적으로 만료 된 항목을 반환하지 않도록하고, 잠재적으로 항목을 삭제하기위한 것입니다. 이 게으른 전략의 위에, 모든 100 MS는 폐품 알고리즘 (즉,이 기본 사전에서 제거) 물리적 항목의 수를 만료 트리거됩니다. 각 반복에 대하여 고려되는 키의 개수가 만료 부하 (적응성 알고리즘 임)에 의존한다.

    결과는 당신이 만료 이벤트의 꾸준한 흐름이있을 때 레디 스는, 주어진 시점에 만료 항목의 백 로그가있을 수 있습니다.

    이제 질문에 돌아 오는 아직 제거되지 않은 만료 된 항목이 포함 있도록 DBSIZE 명령은 주 사전의 크기를 반환합니다. 이 모든 만료 된 항목을 제외하므로 KEYS 명령은 개인 키를 액세스, 전체 사전을 통해 안내합니다. 항목의 수는 그러므로 일치하지 않을 수 있습니다.

  2. from https://stackoverflow.com/questions/9219107/accuracy-of-redis-dbsize-command by cc-by-sa and MIT license