[REDIS] 레디 스에서 여러 키 값 가져 오기
REDIS레디 스에서 여러 키 값 가져 오기
나는 현재 레디 스 놀아 그리고 난 몇 가지 질문 있어요. 이 키의 배열에서 값을 얻을 수 있습니까?
예:
users:1:name "daniel"
users:1:age "24"
users:2:name "user2"
users:2:age "24"
events:1:attendees "users:1", "users:2"
1 : 내가 이벤트 redis.get 때, "사용자 : 2": 참석자는 "1 사용자"를 반환합니다. 나는이 목록을 통해 루프를 할 수있는 사용자 수 : 1, 사용자를 얻을 : 2. 그러나이 Feel로의 잘못된 모든 일 개 GET에 참석자 정보를 얻을 수있는 방법이 있나요?!
레일에서 내가 이런 짓을 할 것이다 :
@event.attendees.each do |att|
att.name
end
그러나 레디 스에서 내가 그것을 열쇠가 아니라 그 키에 저장된 실제 개체를 반환 할 수 있기 때문이다.
감사 :)
해결법
-
==============================
1.항목에 루프를하는 동 기적으로 각각의 요소에 접근하는 것은 매우 효율적이지 않습니다. 레디 스 2.4로, 당신이 원하는 것을 할 수있는 여러 가지 방법이 있습니다 :
항목에 루프를하는 동 기적으로 각각의 요소에 접근하는 것은 매우 효율적이지 않습니다. 레디 스 2.4로, 당신이 원하는 것을 할 수있는 여러 가지 방법이 있습니다 :
레디 스 2.6로, 당신은 또한 루아 스크립트를 사용할 수 있지만이 정말 여기에 필요하지 않습니다.
그건 그렇고, 당신이 설명하는 데이터 구조는 해시를 사용하여 개선 될 수있다. 대신 별도의 키에 사용자 데이터를 저장, 당신은 해시 객체의 그룹을 수 있습니다.
sort 명령을 사용하여
당신은 하나 명의 왕복에있는 데이터를 검색 할 레디 스의 정렬 명령을 사용할 수 있습니다.
redis> set users:1:name "daniel" OK redis> set users:1:age 24 OK redis> set users:2:name "user2" OK redis> set users:2:age 24 OK redis> sadd events:1:attendees users:1 users:2 (integer) 2 redis> sort events:1:attendees by nosort get *:name get *:age 1) "user2" 2) "24" 3) "daniel" 4) "24"
파이프 라이닝을 사용하여
루비 클라이언트 지원 파이프 라인 (즉, 능력은 레디 스에 여러 개의 쿼리를 서버에 전달하고 몇 가지 답변을 기다리는).
keys = $redis.smembers("events:1:attendees") res = $redis.pipelined do keys.each do |x| $redis.mget(x+":name",x+":age") end end
위의 코드는 두 왕복의 데이터를 검색합니다.
가변 매개 변수 명령을 사용하여
MGET 명령은 한 번에 여러 데이터를 검색하는 데 사용할 수 있습니다 :
redis> smembers events:1:attendees 1) "users:2" 2) "users:1" redis> mget users:1:name users:1:age users:2:name users:2:age 1) "daniel" 2) "24" 3) "user2" 4) "24"
여기에 비용은 또한 2 왕복입니다. 당신이 검색하는 키의 수는 제한되어 있음을 보장 할 수있는 경우에 작동합니다. 그렇지 않은 경우, 파이프 라인은 훨씬 더 나은 솔루션입니다.
-
==============================
2.당신은 블록의 결과를 한번 루프 "서버 측"를 실행하는 루아 스크립트를 보내고 돌아 레디 스 'EVAL 명령을 사용할 수 있습니다.
당신은 블록의 결과를 한번 루프 "서버 측"를 실행하는 루아 스크립트를 보내고 돌아 레디 스 'EVAL 명령을 사용할 수 있습니다.
from https://stackoverflow.com/questions/10155398/getting-multiple-key-values-from-redis by cc-by-sa and MIT license
'REDIS' 카테고리의 다른 글
[REDIS] Heroku가에 레디 스를 배포하는 것은없는 연결 (0) | 2020.01.05 |
---|---|
[REDIS] 키 이벤트가 만료 (0) | 2020.01.05 |
[REDIS] 봄 레디 스 오류 핸들 (0) | 2020.01.05 |
[REDIS] 어떻게 레디 스에 laravel 큐에 대기중인 모든 작업을 얻으려면? (0) | 2020.01.05 |
[REDIS] 어떻게 스케일 Node.js를 웹 소켓 레디 스 서버에? (0) | 2020.01.05 |