Redis에서 키 수를 인쇄하는 방법이 있습니까?
나는 알고있어
keys *
그러나 그것은 약간 무거운 무게로 보입니다. -Redis가 핵심 가치 저장소라는 점을 감안할 때 이것이 유일한 방법 일 것입니다. 하지만 난 여전히 라인을 따라 뭔가를보고 싶습니다
count keys *
Redis에서 키 수를 인쇄하는 방법이 있습니까?
나는 알고있어
keys *
그러나 그것은 약간 무거운 무게로 보입니다. -Redis가 핵심 가치 저장소라는 점을 감안할 때 이것이 유일한 방법 일 것입니다. 하지만 난 여전히 라인을 따라 뭔가를보고 싶습니다
count keys *
답변:
서버에 대한 정보 및 통계를 리턴하는 INFO 명령을 실행할 수 있습니다. 예제 출력 은 여기 를 참조 하십시오 .
mVChr의 의견에서 언급했듯이 info keyspace
redis-cli에서 직접 사용할 수 있습니다 .
redis-cli INFO Keyspace | grep ^db
KEYS *
만료 된 키를 제거합니다. 또한 Redis 는 일부 만료 된 키를 적극적으로 제거 할 수 있지만 반드시 모든 키를 제거 할 수는 없습니다.
경고 : 프로덕션 머신에서는 이것을 실행하지 마십시오.
Linux 박스에서 :
redis-cli KEYS "*" | wc -l
참고 : 아래 주석에서 언급했듯이 이것은 O (N) 작업이므로 키가 많은 대형 DB에서는이를 사용하지 않아야합니다. 소규모 배포의 경우 문제가 없습니다.
Redis 2.6부터 lua가 지원되므로 이와 같은 와일드 카드 키를 얻을 수 있습니다
eval "return #redis.call('keys', 'prefix-*')" 0
평가 명령을 참조하십시오
KEYS
(접두사와 함께 또는없이) 키를 계산하는 것은 목욕물과 함께 아기를 밖으로 던지는 것과 같다.
#
이 코드에서는 길이 연산자 입니다.
dbsize()
총 키 수를 반환합니다.
무작위로 키를 샘플링 한 다음 패턴과 일치하는 부분을 확인하여 주어진 패턴과 일치하는 키 수를 빠르게 추정 할 수 있습니다.
파이썬의 예; 로 시작하는 모든 키 계산 prefix_
:
import redis
r = redis.StrictRedis(host = 'localhost', port=6379)
iter=1000
print 'Approximately', r.dbsize() * float(sum([r.randomkey().startswith('prefix_') for i in xrange(iter)])) / iter
심지어 iter=100
아직에 비해 매우 빠르고, 내 경우에 유리한 견적을 제공합니다 keys prefix_
.
개선 된 방법은 모든 요청에서 1000 개의 키를 샘플링하지만 총 개수를 유지하여 두 요청을 2000으로 나누고 세 요청을 3000으로 나눕니다. 따라서 응용 프로그램이 총 수에 관심이있는 경우 일치하는 키를 자주 사용하면 실제 값에 가까워 질 때마다
Redis 2.6 이후에는 INFO 명령의 결과가 섹션별로 분할됩니다. "키 스페이스"섹션에는 몇 개의 키가 있는지 알려주는 "키"및 "만료 된 키"필드가 있습니다.