[redis] 사용 가능한 모든 키를 얻는 Redis 명령?

데이터베이스의 모든 키를 가져 오기위한 Redis 명령이 있습니까? python-redis 라이브러리를 가져 오는 것을 보았습니다. 그러나 redis-client에서 가능한지 궁금했습니다.



답변

KEYS명령 을 봅니다 . KEYS *redis에 저장된 모든 키를 나열합니다.

편집 :KEYS 설명서 페이지 상단의 경고에 유의 하십시오.

시간 복잡도 : 데이터베이스의 키 이름과 주어진 패턴의 길이가 제한되어 있다는 가정하에 N은 데이터베이스의 키 수인 N (N)입니다.

UPDATE (V2.8 이상) : SCANKEYS서버를 차단하지 않거나 상당한 리소스를 소비하지 않는다는 점에서의 대안 입니다. 그것을 사용하는 것을 선호하십시오.


답변

Redis 2.8 이상용으로 업데이트되었습니다

이 질문에 대한 이전 답변의 의견에서 언급했듯이 KEYSRedis 서버가 다른 작업을 수행하는 동안 서버를 사용할 수 없으므로 잠재적으로 위험한 명령입니다. 또 다른 위험 KEYS은 응답 버퍼를 준비하기 위해 많은 RAM을 (키 공간의 크기에 따라) 소비하여 서버의 메모리를 소진시킬 수 있다는 것입니다.

Redis 버전 2.8 은 훨씬 더 정중하고 동일한 목적으로 사용할 수있는 SCAN 명령 제품군을 도입했습니다 .

CLI는 또한 좋은 작업 방법을 제공합니다.

$ redis-cli --scan --pattern '*'


답변

redis-cli를 사용하면 원격 redis-server에 연결 한 후 다음 명령이 발생할 수 있습니다.

KEYS *

아무것도 보여주지 않거나 더 잘 보여줍니다.
(empty list or set)

사용중인 Redis 서버가 데이터를 보유한 서버인지 확실하면 redis-cli가 Redis 올바른 데이터베이스 인스턴스에 연결되지 않은 것일 수 있습니다.

Redis 문서에서 언급했듯이 새 연결은 기본적으로 db 0에 연결됩니다 .

필자의 경우 KEYS데이터베이스가 1이기 때문에 명령에서 결과를 검색하지 못했습니다 . 원하는 db를 선택하려면 SELECT를 사용하십시오 .
db는 정수로 식별됩니다.

SELECT 1
KEYS *

이전 답변 중 어느 것도 내 문제를 해결하지 못했기 때문에이 정보를 게시합니다.


답변

-> redis-cli에서 모든 키 가져 오기

-redis 127.0.0.1:6379> keys *

-> 패턴 목록 가져 오기

-redis 127.0.0.1:6379> keys d??

그러면 3 자로 시작하는 ‘d’로 시작하는 키가 생성됩니다.

-redis 127.0.0.1:6379> keys *t*

이것은 키에서 ‘t’문자와 일치하는 키를 얻습니다.

-> 명령 줄에서 키를 계산

-redis-cli keys * |wc -l

-> 또는 사용할 수 있습니다 dbsize

-redis-cli dbsize


답변

Redis Cheat Sheet 다음을 살펴보십시오 . redis-cli로 redis 키의 하위 집합을 얻으려면 다음 명령을 사용하십시오.

KEYS "prefix:*"


답변

예, 이것을 사용하여 모든 키를 얻을 수 있습니다

var redis = require('redis');
redisClient = redis.createClient(redis.port, redis.host);
  redisClient.keys('*example*', function (err, keys) {
})


답변

스캔은 클라이언트가 KEYS처럼 모든 키를 메모리에로드 할 필요가 없습니다. SCAN은 사용할 수있는 반복자를 제공합니다. 내 redis에 1B 레코드가 있었고 모든 키를 한 번에 반환하기에 충분한 메모리를 얻을 수 없었습니다.

다음은 상점에서 패턴과 일치하는 모든 키를 가져 와서 삭제하는 파이썬 스 니펫입니다.

import redis
r = redis.StrictRedis(host='localhost', port=6379, db=0)
for key in r.scan_iter("key_pattern*"):
    print key