데이터베이스의 모든 키를 가져 오기위한 Redis 명령이 있습니까? python-redis 라이브러리를 가져 오는 것을 보았습니다. 그러나 redis-client에서 가능한지 궁금했습니다.
답변
KEYS
명령 을 봅니다 . KEYS *
redis에 저장된 모든 키를 나열합니다.
편집 :KEYS
설명서 페이지 상단의 경고에 유의 하십시오.
시간 복잡도 : 데이터베이스의 키 이름과 주어진 패턴의 길이가 제한되어 있다는 가정하에 N은 데이터베이스의 키 수인 N (N)입니다.
UPDATE (V2.8 이상) : SCAN
는 KEYS
서버를 차단하지 않거나 상당한 리소스를 소비하지 않는다는 점에서의 대안 입니다. 그것을 사용하는 것을 선호하십시오.
답변
Redis 2.8 이상용으로 업데이트되었습니다
이 질문에 대한 이전 답변의 의견에서 언급했듯이 KEYS
Redis 서버가 다른 작업을 수행하는 동안 서버를 사용할 수 없으므로 잠재적으로 위험한 명령입니다. 또 다른 위험 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