IT story

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

hot-time 2020. 12. 23. 07:32
반응형

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


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


KEYS명령 을 살펴보십시오 . KEYS *redis에 저장된 모든 키를 나열합니다.

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

시간 복잡성 : 데이터베이스의 키 이름과 주어진 패턴의 길이가 제한되어 있다는 가정하에 N은 데이터베이스의 키 수인 O (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) {
})

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

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

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


키 패턴

1.0.0부터 사용 가능합니다.

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

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

Warning : This command is not recommended to use because it may ruin performance when it is executed against large databases instead of KEYS you can use SCAN or SETS.

Example of KEYS command to use :

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"

If your redis is a cluster,you can use this script

#!/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"

In order to get all the keys available in redis server, you should open redis-cli and type: KEYS * In order to get more help please visit this page: This Link

ReferenceURL : https://stackoverflow.com/questions/5252099/redis-command-to-get-all-available-keys

반응형