[REDIS] 레디 스 스캔 수 : 어떻게 패턴과 일치하는 모든 키를 반환 SCAN을 강제로?
REDIS레디 스 스캔 수 : 어떻게 패턴과 일치하는 모든 키를 반환 SCAN을 강제로?
나는 레디 스에서 패턴과 일치하는 키 목록에 저장된 값을 찾기 위해 노력하고있다. 나는 그래서 나중에 내가 모든 값을 얻을 수 MGET을 사용할 수 있습니다에 SCAN을 사용했는데, 문제는 :
SCAN 0 MATCH "foo:bar:*" COUNT 1000
값 반면을 반환하지 않습니다
SCAN 0 MATCH "foo:bar:*" COUNT 10000
원하는 키를 돌려줍니다. 어떻게하면 기존의 모든 키를 통해보고 SCAN을 강요하는 걸까? 나는이에 대한 루아에보고해야합니까?
해결법
-
==============================
1.당신이 아래의 코드는 커서 0에서 1000 첫 번째 개체를 검색합니다 함께
당신이 아래의 코드는 커서 0에서 1000 첫 번째 개체를 검색합니다 함께
SCAN 0 MATCH "foo:bar:*" COUNT 1000
결과에서는 리콜에 새로운 커서를 얻을 것이다
SCAN YOUR_NEW_CURSOR MATCH "foo:bar:*" COUNT 1000
1000 다음 개체를 검사합니다. 그럼 당신은 다음의 경우에 더 키와 일치하는 당신이 더 많은 키를 스캔 데이터를 1000 1000에서 COUNT를 증가 및 검색 할 때.
당신이 응답 리턴 제로의 커서주고 때까지 리콜 SCAN에 필요한 전체 목록 (즉 전체 스캔) 스캔하려면
사용 정보는 같은 키의 당신의 양을 얻을 명령
그런 다음 호출
SCAN 0 MATCH "foo:bar:*" COUNT YOUR_AMOUNT_OF_KEYS
-
==============================
2.그냥 파이썬 레디 스 라이브러리를 사용하여 작업을 수행하는 방법에 관심있는 사람들을위한 여기를 넣어 것 :
그냥 파이썬 레디 스 라이브러리를 사용하여 작업을 수행하는 방법에 관심있는 사람들을위한 여기를 넣어 것 :
import redis redis_server = redis.StrictRedis(host=settings.redis_ip, port=6379, db=0) mid_results = [] cur, results = redis_server.scan(0,'foo:bar:*',1000) mid_results += results while cur != 0: cur, results = redis_server.scan(cur,'foo:bar:*',1000) mid_results += results final_uniq_results = set(mid_results)
그것은이 아웃을 내기 위해 몇 일이 걸렸다 있지만, 기본적으로 각각의 검사는 튜플을 반환합니다.
예를 들면 :
(cursor, results_list) (5433L, [... keys here ...]) (3244L, [... keys here, maybe ...]) (6543L, [... keys here, duplicates maybe too ...]) (0L, [... last items here ...])
나는 커서 번호가 무엇인지 알아내는 힘든 시간이 있었고, 나는 무작위로 빈 목록 또는 반복되는 항목을받을 이유지만, 비록 난 그냥에서 항목을 넣어 알고 있었다.
읽고 나서:
그것은 더 의미를 만들었지 만, 여전히 몇 가지 깊은 프로그래밍 마법과 세트 반복하는 일이 타협.
-
==============================
3.알림이 당신이 레디 스 파이썬 라이브러리에 scan_iter 방법을 사용하는 경우 간단한 작업은 다음과 같습니다
알림이 당신이 레디 스 파이썬 라이브러리에 scan_iter 방법을 사용하는 경우 간단한 작업은 다음과 같습니다
from redis import StrictRedis redis = StrictRedis.from_url(REDIS_URI) keys = [] for key in redis.scan_iter('foo:bar:*', 1000): keys.append(key)
결국, 키는 당신의 방법 @khanou을 적용하여 얻을 수있는 모든 키를 포함합니다.
그 루프의 각 반복에 새로운 클라이언트를 생성하기 때문에이 또한 쉘 스크립트를하는 것보다 더 효율적입니다.
from https://stackoverflow.com/questions/33166812/redis-scan-count-how-to-force-scan-to-return-all-keys-matching-a-pattern by cc-by-sa and MIT license
'REDIS' 카테고리의 다른 글
[REDIS] 레디 스 : 소트 세트의 점수의 합 (0) | 2020.01.02 |
---|---|
[REDIS] 레디 스는 구독을 공표 : IS 레디 스도 엄청난 스트레스를 받고 메시지를 전달하기 위해 보장? (0) | 2020.01.02 |
[REDIS] 레디 스 인상 오류 : NOAUTH 인증이 필요하지만 암호 설정이 없습니다 (0) | 2020.01.02 |
[REDIS] 어떻게 레디 스를 사용하여 작업에 세션을 얻을 수 있습니다, 표현 및 socket.io? (0) | 2020.01.02 |
[REDIS] '메시지'청취자에 레디 스를 제거하는 방법 (0) | 2020.01.02 |