[REDIS] 레디 스 - 소트 세트는, 속성 값으로 항목을 찾을 수 있습니다
REDIS레디 스 - 소트 세트는, 속성 값으로 항목을 찾을 수 있습니다
레디 스에서 나는 정렬 된 세트에서 객체를 저장합니다. 내 솔루션에서, 내가 점수가 예를 들어 각 항목의 타임 스탬프, 인으로 항목을 저장할 수 있도록 날짜에 의해 원거리 쿼리를 실행할 수 있도록 중요합니다 :
# Score Value
0 1443476076 {"Id":"92","Ref":"7ADT","DTime":1443476076,"ATime":1443901554,"ExTime":0,"SPName":"7ADT33CFSAU6","StPName":"7ADT33CFSAU6"}
1 1443482969 {"Id":"11","Ref":"DAJT","DTime":1443482969,"ATime":1443901326,"ExTime":0,"SPName":"DAJTJTT4T02O","StPName":"DAJTJTT4T02O"}
그러나 다른 상황에서 나는 그것의 ID에 따라 세트의 단일 항목을 찾을 필요가있다. 나는 그것이없는 NoSQL DB 것처럼 난 그냥이 데이터 구조를 쿼리 할 수 없습니다 알고,하지만 난 작동하지 않았다 ZSCAN를 사용했습니다.
ZSCAN MySet 0 MATCH Id:92 count 1
그것은 반환 "빈 목록 또는 세트"
어쩌면 내가 다른 직렬화해야합니까? 나는 Json.Net를 사용하여 직렬화있다.
어떻게, 가능하면, 내가 이것을 달성 할 수있다; 점수로 날짜를 사용하고 아직도의 ID로 항목을 조회 할 수?
많은 감사합니다,
라스
편집하다:
그것이 불가능하지만, 어떤 생각이나 입력을 환영합니다 가정 :
참조 : http://openmymind.net/2011/11/8/Redis-Zero-To-Master-In-30-Minutes-Part-1/
편집 2 :
내가하려고 노력 :
ZSCAN MySet 0 MATCH *87*
127.0.0.1:6379> ZSCAN MySet 0 MATCH *87*
1) "192"
2) 1) "{\"Id\":\"64\",\"Ref\":\"XQH4\",\"DTime\":1443837798,\"ATime\":1444187707,\"ExTime\":0,\"SPName\":\"XQH4BPGW47FM\",\"StPName\":\"XQH4BPGW47FM\"}"
2) "1443837798"
3) "{\"Id\":\"87\",\"Ref\":\"5CY6\",\"DTime\":1443519199,\"ATime\":1444172326,\"ExTime\":0,\"SPName\":\"5CY6DHP23RXB\",\"StPName\":\"5CY6DHP23RXB\"}"
4) "1443519199"
그리고 원하는 항목을 발견뿐만 아니라 속성 ATIME 87의 occurance 또 다른 하나를 발견한다. 더 독특한 데, 더 이상 ID는이 방식으로 작동 할 수와 나는 그것의 속성에 정확한 값으로 하나를 찾기 위해 코드의 결과를 필터링해야합니다.
아직 제안을 엽니 다.
해결법
-
==============================
1.나는 그것이 매우 간단합니다 생각합니다.
나는 그것이 매우 간단합니다 생각합니다.
ZSCAN 요소인지 0 MATCH 아이디의 길 : 저장된 문자열이 "{\"ID \ 있기 때문에 92 횟수 1 작동하지 않았다 ": \"92 \ "... 없습니다"{\ "ID : 92 \".. .. 문자열이 다른 포맷으로 변화되어왔다. 그래서 MATCH 아이디 \를 사용하려고 ": \"그런 64 것을 레디 스에서 JSON를 직렬화 된 데이터와 일치 할 수 있습니다. 당신을위한 실제 문자열 잎이 발견, 그래서 나는 json.net에 익숙하지 않다.
그건 그렇고, 내가 당신을 물어 봐야했다 ZSCAN 요소인지 0 MATCH ID : 92 수를 1 명 복귀 커서? 난 당신이 잘못된 방법으로 ZSCAN을 사용 생각한다.
당신의 소트 세트가 크지 않은 당신은 레디 스 '루아 트랜잭션에 의해 네트워크 왕복 시간을 절약하는 방법을 알고 때 ZSCAN이 좋다. 이것은 아직 확인 작업 O (n)의 "ID로 찾아". 따라서, 더 나은 솔루션은 다음과 같은 방법으로 당신에게 데이터 모델을 변경하는 것입니다 :
변경 집합을 분류 ...에서
# Score Value 0 1443476076 {"Id":"92","Ref":"7ADT","DTime":1443476076,"ATime":1443901554,"ExTime":0,"SPName":"7ADT33CFSAU6","StPName":"7ADT33CFSAU6"} 1 1443482969 {"Id":"11","Ref":"DAJT","DTime":1443482969,"ATime":1443901326,"ExTime":0,"SPName":"DAJTJTT4T02O","StPName":"DAJTJTT4T02O"}
에
# Score Value 0 1443476076 Id:92 1 1443482969 Id:11
해시 유형 키의 또 다른 세트의 나머지 자세한 데이터를 이동 :
# Key field-value field-value ... 0 Id:92 Ref-7ADT DTime-1443476076 ... 1 Id:11 Ref-7ADT DTime-1443476076 ...
그런 다음 hgetall ID를 수행하여 ID로 찾습니다 (92). 날짜별로였다 쿼리에 관해서는, 당신은 그 ZRANGEBYSCORE SortedSet의 mindate maxdate을 하나 모든 아이디를 hgetall 필요가있다. 당신은 더 나은 하나 이러한 명령을 포장 루아를 사용하십시오 그것은 여전히 슈퍼 빠른 것입니다!
형 NoSQL 데이터베이스가 필요한 데이터는 위의 같은 중복 방식으로 구성된다. 이것은 몇 가지 일반적인 작업이 하나 이상의 명령과 왕복을 포함 할 수 있지만 레디 스의 루아 기능으로 달려 드는 수 있습니다. 난 강력하게, 레디 스의 루아 기능을 추천은 모든 슈퍼 빠른 레디 스 서버 측에서 실행 및 원자이며, 하나의 네트워크 왕복으로 명령을 포장의 원인!
당신이 모르는 무언가가 있다면 회신
from https://stackoverflow.com/questions/32854616/redis-sorted-set-find-item-by-property-value by cc-by-sa and MIT license
'REDIS' 카테고리의 다른 글
[REDIS] 봄 통합에 레디 스에 대한 MessageSource를 만들기 (0) | 2020.01.21 |
---|---|
[REDIS] 레디 스에 연결하는 문제는 여러 작업자 쿠에스와 함께 이동 (0) | 2020.01.21 |
[REDIS] 외부 Laravel (NodeJS)로부터 Laravel 대기열로 푸시 (0) | 2020.01.21 |
[REDIS] 어떻게 BookSleeve / 레디 스에서 PubSub 작동합니까? (0) | 2020.01.20 |
[REDIS] 페이스 북 앱에 대한 레디 스 &시나와 지리 공간 색인 (0) | 2020.01.20 |