2012-01-05 7 views
10

세미콜론을 사용하여 데이터를 저장했습니다.와일드 카드를 사용하여 키 찾기

redis> keys party:* 

1) "party:congress:president" 
2) "party:bjp:president" 
3) "party:bjp" 
4) "party:sena" 

모든 당사자를 나열하는 명령이 있습니까? 위의 예의 경우, 나는 예상한다

congress 
bjp 
sena 
+1

이후

가능 (스캔하는 동안 그들이 삽입되는 경우 모든 당사자를 얻지 못할 수도) 당신은에있는 모든 당사자를 얻기 위해 다시 0으로 반환 그것을위한 별도의 목록을 유지, 그 비싼 –

답변

18

아니, 그것을 할 명령이 없습니다. 하지만 정말로해야한다면 클라이언트 측에서 구현하는 것이 쉽습니다.

응용 프로그램은 KEYS 명령을 사용하여 데이터를 검색해서는 안됩니다. KEYS는 저장 한 수백만 개의 키를 선형 적으로 스캔하면서 전체 Redis 인스턴스를 차단합니다. 이것은 관리 도구에서 사용되는 디버깅 명령입니다. 레디 스와

는, 인덱스에는 BTREE 구조의 키가 없다, 그래서 당신의 키 (... 세트, ZSET 등) 기존의 콜렉션에 저장되어있는 경우

+0

부분 키로 검색 할 수있는 [이 답변] (http://stackoverflow.com/a/30490869/1041046)에서 보았다. 내가 방금 홍채에 대해 배울 때, 나는 그것이 얼마나 정확한지 잘 모릅니다. 자세한 내용을 포함하도록 답변을 업데이트해야 할 수도 있습니다. – AaA

+0

부분 키를 사용하여 검색하는 것이 가능합니다. 부분 키를 사용하여 효율적으로 검색하는 것은 불가능합니다. 단, 이에 대한 데이터 구조를 명시 적으로 만드는 경우는 예외입니다. 더욱이 원래의 질문은 검색에 관한 것이 아니라 결과 조작 (클라이언트 측에서 더 잘 수행됨)입니다. –

+0

좋은 점은 키에서 부분 검색을 찾고 있는데 이것은 Google에서 두 번째 결과입니다. – AaA

1

내 생각 제외하고는, 키에 대해 쿼리 할 수 ​​없습니다 redis에서 '당사자'데이터를 가져 오려면 일반 데이터를 저장할 때마다 당사자 이름을 당사자 목록에 저장하면 쉽게 얻을 수 있습니다.

4

SCAN 명령을 다시 사용할 때 SCAN 명령을 사용할 수 있습니다. 전체 데이터베이스를 차단하지 않고 키를 검색하십시오.

redis SCAN docs

이 명령은 많은 KEYS 명령에서 필터처럼 작동 옵션 MATCH 필터가 있습니다. 커서까지 호출

redis> SCAN 0 MATCH party:* 

1) <the cursor> 
2) 1) "party:congress:president" 
    2) "party:bjp:president" 
    3) "party:bjp" 
    4) "party:sena" 

킵은 2.8

관련 문제