2017-09-28 2 views
0

Redis에서 SCAN/COUNT 명령 조합을 사용하여 키 공간에서 임의의 순서로 키를 검색 할 수 있습니다. 예를 들어 키 공간에 100 개의 키가 있고 키가 001,002,003 ... 100으로 저장된 경우를 예로들 수 있습니다. 'scan 0 count 50'명령을 사용하면 결과에 임의의 순서로 나열된 50 개의 키가 포함됩니다 (예 : 002, 003, 050 ...).키가 저장된 순서대로 Redis 키 공간을 순차적으로 검색하는 방법은 무엇입니까?

우리가 키 공간을 스캔이 레디 스에 저장된 순서대로 키를 가져올 수 있습니다 어쨌든 있나요? 예상 키 검사 결과는 같아야 001, 002, 003 ... 050 ...

또한, 레디 스 키 공간에서 특정 키를 가리킨 다음 'N'키를 검사하는 방법이 있나요? 예를 들어 key-010으로 이동하여 11에서 30까지 스캔하십시오.

조언을 구하십시오. 두 질문에

+0

키 때문에 "가 레디 스에 저장된 순서"를 가져 묻는 해시 테이블에 저장됩니다 당신에게 임의의 순서를 줄 것이다. 또한 스캔 의미 및 해시 테이블 버킷 팅 (bucketing bucketing)으로 인해 COUNT50을 수행 할 때 50 개를 초과하거나 50 개를 초과 할 수 있습니다. 질문에서 몇 가지 명백한 오해를 해결하십시오. 받아 들여진 대답은 좋다. – nnog

답변

2

짧은 대답은 다음과 같습니다 없음.

키 스페이스 반복을 수동으로 수행 할 수 있습니다. 정렬 된 집합에서 키를 인덱싱 한 다음 ZRANGE 및 ZRANGEBYLEX를 사용하여 순서대로 키 공간을 스캔하고 접두어에서 스캔을 시작할 수 있습니다.

당신은 또한 인덱스에 필요의 당신은, 키가 foo는 바, 바즈를 작성한다고 가정 해 봅시다. 우리는 반드시 인덱스는 우리가 0이의 점수로 소트 세트에 모든 키를 추가 한

> MULTI 
> SET foo 1 
> ZADD __index__ 0 foo 
> EXEC 
> 
> MULTI 
> SET bar 2 
> ZADD __index__ 0 bar 
> EXEC 
> 
> MULTI 
> SET baz whatever 
> ZADD __index__ 0 baz 
> EXEC 
... and so on 

공지 사항 우리가 어휘 범위를 활용할 수 있다는 것을 의미한다 일치하도록 트랜잭션이를 수행합니다.

이제 우리는 단순히 ZRANGE 또는 ZREVRANGE을 수행 인덱스를 반복합니다. 모든 요소의 점수가 0이므로 순서는 사전식이됩니다. 이 코드에 적극적으로 물건을 필요로

ZRANGEBYLEX __index__ [foo + LIMIT 0 10 

하지만,하지 말아야 할 어려운 :

ZRANGE __index__ 0 10 

는 특정 항목 "foo는"10 키를 반복하기 : 그래서 처음 10 개 요소를 페이징. 그러나 어쨌든, 오랫동안 답하십시오 - 이것이 지금이 목표를 달성하는 유일한 방법입니다. 조금 자동화 할 수있는 모듈이 있지만 아직 완전히 자동화되지는 않았습니다.

+0

설명 주셔서 감사합니다 !! 내 문제 성명에 대한 좋은 해결책 – BDENTHUS