[REDIS] 레디 스 클러스터 : 루아 스크립트와 다른 노드에 키 업데이트
REDIS레디 스 클러스터 : 루아 스크립트와 다른 노드에 키 업데이트
여러 개의 노드로 구성된 레디 스 클러스터가 있습니다. 나는 하나의 원자 작업으로 3 개의 다른 키를 업데이트 할. 내 루아 스크립트 같다 :
local u1 = redis.call('incrby', KEYS[1], ARGV[1])
local u2 = redis.call('incrby', KEYS[2], ARGV[1])
local u3 = redis.call('incrby', KEYS[3], ARGV[1])
그리고 나는 그것을 함께 발사 :
EVAL script 3 key1 key2 key3 arg
그러나 나는 (요청에 AppErr CROSSSLOT 키 동일한 슬롯에 해시를하지 않는) RESP 경고를 받았습니다. 위의 작업을 수행 할 수 없으며, 업데이트가 실패합니다. 내가 하나의 루아 스크립트를 사용하여 서로 다른 노드에있는 키를 수정할 수 없습니다 보인다. 그러나 문서에 따르면 :
내가만큼 내가 규칙을 통과하는 키를 따를 생각 그래서, 스크립트는 레디 스 클러스터와 호환되어야합니다. 여기 문제가 무엇을 궁금해 나는 하나의 스크립트에서 모든 키를 업데이트하려면 어떻게해야.
해결법
-
==============================
1.난 당신이 문서를 오해 한 두려워. (그리고 나는 그것이 매우 명확하지 동의합니다.)
난 당신이 문서를 오해 한 두려워. (그리고 나는 그것이 매우 명확하지 동의합니다.)
레디 스 작업, 명령이나 루아 스크립트 여부, 할 수있는 모든 키가 같은 서버에있는 경우에만 작동합니다. 키 통과 규칙의 목적은 클러스터 서버가 스크립트를 전송하고 모든 키 (귀하의 경우에 무슨 일이 있었는지입니다) 동일한 서버에서 오지 않는 경우 빠른 실패 할 위치를 알아낼 수 있도록하는 것입니다.
그래서 당신이에 조작하려는 모든 키가 같은 서버에있는 것을 확인하는 것은 귀하의 책임입니다. 그렇게하는 방법은 동일한 슬롯에 해시에 힘 키에 해시 태그를 사용하는 것입니다. 그에 대한 자세한 내용은 설명서를 참조하십시오.
from https://stackoverflow.com/questions/38234507/redis-cluster-update-keys-in-different-node-with-lua-script by cc-by-sa and MIT license
'REDIS' 카테고리의 다른 글
[REDIS] 레디 스 약간의 OS에 버퍼가 아닌 다른 사람과 같은 문자열을 저장? (0) | 2020.01.23 |
---|---|
[REDIS] HSET 경우 키의 존재 (0) | 2020.01.23 |
[REDIS] 어떻게 레디 스 만의 키의 일부를 LRU 퇴거 정책을 선택 만드는 방법? (0) | 2020.01.23 |
[REDIS] 레디 스 직렬화는 별도의 문자열로 시작 (0) | 2020.01.23 |
[REDIS] 도커 - 작성 - 0.0.0.0에서 레디 스 대신 127.0.0.1 (0) | 2020.01.23 |