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


502

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

답변:


721

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

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

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

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


96
CLI 사용 예 :redis-cli keys "*"
XåpplI'-I0llwlg'I-

4
수정 : 모든 redis 명령은 단일 스레드이며 서버를 차단합니다. 유일한 차이점은 KEYS대용량 데이터 세트를 쿼리 할 때 서버를 더 오래 차단할 수 있다는 것입니다.
Leo

155

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

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

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

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

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

59

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

KEYS *

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

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

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

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

SELECT 1
KEYS *

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


31

-> 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

답을 복사하고 시도했습니다. "알 수없는 명령 '키'를 주었다. "key"는 명령이 아니며 "keys"입니다. 수정하십시오 key *t*keys *t*.
Kunal Dethe

그 information.it에 대한 고마워 친구. 내 실수였다. 현재 나는 모바일에있다. 나는 그 명령을 eairlier로 바꿀 것이다.
denny

매우 유용한 치트 시트
Hassan Baig

19

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

KEYS "prefix:*"

6

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

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

4
OP가 무엇을 요구했는지 정확히 (redis-cli)는 아니지만 그럼에도 불구하고 지적 해 주셔서 감사합니다.
Herick

4

스캔은 클라이언트가 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

3
redis-cli -h <host> -p <port> keys * 

여기서 *는 모든 키를 나열하는 패턴입니다.


2
다음과 같이 나는 별을 인용했다 :redis-cli -h <host> -p <port> keys '*'
aggregate1166877

3

키 패턴

1.0.0부터 사용 가능합니다.

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

패턴과 일치하는 모든 키를 반환합니다.

경고 : 이 명령은 KEYS 대신 큰 데이터베이스에 대해 실행될 때 성능을 손상시킬 수 있으므로 SCAN 또는 SETS를 사용할 수 있으므로 사용하지 않는 것이 좋습니다 .

사용할 KEYS 명령의 예 :

redis> MSET firstname Jack lastname Stuntman age 35
"OK"
redis> KEYS *name*
1) "lastname"
2) "firstname"
redis> KEYS a??
1) "age"
redis> KEYS *
1) "lastname"
2) "age"
3) "firstname"

1

redis가 클러스터 인 경우이 스크립트를 사용할 수 있습니다

#!/usr/bin/env bash
redis_list=("172.23.3.19:7001,172.23.3.19:7002,172.23.3.19:7003,172.23.3.19:7004,172.23.3.19:7005,172.23.3.19:7006")

arr=($(echo "$redis_list" | tr ',' '\n'))

for info in ${arr[@]}; do
  echo "start :${info}"
  redis_info=($(echo "$info" | tr ':' '\n'))
  ip=${redis_info[0]}
  port=${redis_info[1]}
  echo "ip="${ip}",port="${port}
  redis-cli -c -h $ip -p $port set laker$port '湖人总冠军'
  redis-cli -c -h $ip -p $port keys \*

done

echo "end"

1

Redis의 모든 키 가져 오기

--scan 옵션을 사용하여 모든 키를 가져옵니다.

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

KEYS 명령을 사용하여 모든 키를 나열하십시오.

$ redis-cli KEYS '*'

0

레디 스 서버에서 사용할 수있는 모든 키를 취득하기 위하여는, 당신은 레디 스-CLI을 열고 다음을 입력한다 : KEYS * 이 페이지를 방문하시기 바랍니다 더 많은 도움을 얻기 위해 : 이 링크



0

Laravel Framework를 사용하는 경우 간단히 다음을 사용할 수 있습니다.

$allKeyList = Redis::KEYS("*");

print_r($allKeyList);

핵심 PHP에서 :

$redis = new Redis();

$redis->connect('hostname', 6379);

$allKeyList = $redis->keys('*');

print_r($allKeyList);

0

redis-cli를 사용하여 redis 서버에 연결하고 데이터베이스를 선택하고 KEYS *를 입력하면 선택한 redis 데이터베이스에있는 모든 키가 제공됩니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.