2016-09-09 5 views
0

에 와일드 카드를 사용하는 I가 다음과 같은 해시 :방법 레디 스 검색

HMSET rules:1231231234_11:00_17:00 fw 4444 dm test.abc.com days 'thu, tue, wed' 
HMSET rules:1231231234_9:00_10:59 fw 2211 dm anothertest.abc.com days 'thu' 

어쨌든 거기에 내가 규칙 해시를 검색하고 1231231234의 접두사가 모든 레코드를 찾을 수 있습니까? 내가 데이터를 생성 한 아마 방법

HGET rules:1231231234* 

또는 같은 뭔가 ... 잘못이다. (JSON 표기법)

{ 
    pn: 1231231234, 
    rules: [{ 
      "expiration_date" : "", 
      "days_of_week" : "Thu, Tue, Wed", 
      "start_time" : "11:00", 
      "end_time" : "17:00", 
      "fw" : "9999" 
     }, 
     { 
      "rule_expiration_date" : "", 
      "days_of_week" : "Thu", 
      "start_time" : "9:00", 
      "end_time" : "10:59", 
      "fw" : "2222" 

     }] 
} 

이 데이터가 사용됩니다 방법 : 무엇이이 같은 데이터 세트를 만들 수있는 가장 좋은 방법

나는에 따라 나에게 적용되는 규칙을 찾아야합니다 현재 시간. 예를 들어, 내 응용 프로그램이 pn 1231231234를 "처리"하는 요청을 받으면 해당 pn 번호에 대한 모든 규칙을 조회 한 다음 현재 요일과 시간 스탬프가 일치하는 규칙을 찾아야합니다.

주어진 pn에 대한 모든 규칙을 되찾은 다음 올바른 규칙을 찾기 위해 클라이언트 코드 루프를 반복해도 상관 없습니다. 내 데이터가 현재 생성 된 방법을 사용

EDIT 1

, 나는이 같은 HSCAN을 시도 : 테스트로

127.0.0.1:6379[1]> HSCAN rules 0 MATCH 1231231234* 
1) "0" 
2) (empty list or set) 
127.0.0.1:6379[1]> 

편집 2

, 나는 시도 이 유형의 구조 대신 :

HMSET rules:1231231234 tue_11:00_17:00 fw 9999 
HMSET rules:1231231234 wed_11:00_17:00 fw 9999 
HMSET rules:1231231234 thur_11:00_17:00 fw 9999 
HMSET rules:1231231234 thu_9:00_10:59 fw 2222 

그럼 메인 pn에 대한 모든 규칙을 볼 수 있습니다. 내 클라이언트 애플 리케이션 결과를 통해 루프를 사용하여 ... ?

+0

이 비슷한 질문하는 데 도움이 : http://stackoverflow.com/questions/34879019/redis-hmget-with-wildcard-fields –

+0

@ChrisTanner [레디 스 /의 편집 1 개 – Happydevdays

+0

가능한 복제를 참조하시기 바랍니다 모든 가져 오기 키 및 값 (접두어가있는 redis)] (https://stackoverflow.com/questions/30728973/redis-get-all-keys-values-from-redis-with-prefix) – tkruse

답변

1

hscan 대신 스캔을 사용해야합니다.

결합 스캔HGETALL이 작업을 수행 할 수 있습니다.

1) 마 스캔 및 얻을 수있는 모든 값 hgetall

127.0.0.1:6379> hgetall rules:1231231234_11:00_17:00 
1) "fw" 
2) "4444" 
3) "dm" 
4) "test.abc.com" 
5) "days" 
6) "thu, tue, wed" 

3

)의 경우를 그들에 앱 로직 반복 처리의 각 키에 대해 다음) 귀하의 패턴

127.0.0.1:6379> scan 0 match rules:1231231234* 
1) "0" 
2) 1) "rules:1231231234_11:00_17:00" 
    2) "rules:1231231234_9:00_10:59" 

이 일치하고 할 귀하의 기준 프로세스와 일치합니다.

4) 동일한 반복을 반복합니다.

희망이

+0

정말 고마워요!그러나 편집 2에서 제안 된 대체 데이터 구조에 대해 어떻게 생각합니까? – Happydevdays

+0

사실, fw와 다른 필드가 덮어 쓰기를 계속하기 때문에 제 편집 2가 작동하지 않을 것이라고 생각합니다 ... – Happydevdays

+0

정확하겠습니다! 그것이 내가 말하려고했던 것입니다. fw 란 무엇입니까? 고유 번호입니까? –