Redis ElastiCache 클러스터(클러스터 모드 활성화됨)에서 다중 키 작업을 수행하는 중에 "CROSSSLOT Keys in request don't hash to the same slot" 오류가 발생하는 이유는 무엇입니까?

최종 업데이트 날짜: 2019년 4월 28일

Redis ElastiCache 클러스터(클러스터 모드 활성화됨)에서 다중 키 작업을 수행하는 중에 키가 동일한 노드에 저장되었어도 "CROSSSLOT Keys in request don't hash to the same slot" 오류가 발생하는 이유는 무엇입니까?

간략한 설명

이 오류는 키가 동일한 노드가 아니라, 동일한 해시 슬롯에 있어야 하기 때문에 발생합니다. 샤딩된 Redis ElastiCache 클러스터(클러스터 모드 활성화됨)에서 다중 키 작업을 구현하려면 키는 동일한 해시 슬롯으로 해시되어야 합니다. 해시 태그를 사용하여 키를 동일한 해시 슬롯에 강제로 배치할 수 있습니다.

이 예제에서는 "myset2" 및 "myset" 세트가 동일한 노드에 있습니다.

172.31.62.135:6379> scan 0
1) "0"
2)  1) "myset"
    2) "myset2"

그러나 다중 키 작업은 지원되지 않습니다.

172.31.62.135:6379> SUNION myset myset2
(error) CROSSSLOT Keys in request don't hash to the same slot

키가 동일한 해시 슬롯에 있지 않기 때문입니다. 이 예제에서는 두 개 세트가 서로 다른 슬롯, 560 및 7967에 있습니다.

172.31.62.135:6379> CLUSTER KEYSLOT myset
(integer) 560
172.31.62.135:6379> CLUSTER KEYSLOT myset2
(integer) 7967

​해결 방법

이 오류를 해결하려면 해시 태그를 사용하여 키를 동일한 해시 슬롯에 강제로 배치합니다. 키에 "{...}" 패턴이 포함된 경우 괄호, "{" 및 "}" 사이의 하위 문자열만 해시 슬롯을 확보하도록 해시됩니다.

예를 들어, {user1}:myset 및 {user1}:myset2 키는 동일한 해시 슬롯으로 해시됩니다. 괄호, "{" 및 "}" 내부의 문자열만(즉, "user1") 사용하여 해시 슬롯을 계산하기 때문입니다.

172.31.62.135:6379> CLUSTER KEYSLOT {user1}:myset
(integer) 8106
172.31.62.135:6379> CLUSTER KEYSLOT {user1}:myset2
(integer) 8106

172.31.62.135:6379> SUNION {user1}:myset {user1}:myset2
1) "some data for myset"
2) "some data for myset2"

두 세트가 동일한 해시 슬롯으로 해시되었으므로 다중 키 작업을 수행할 수 있습니다.


이 문서가 도움이 되었습니까?

AWS에서 개선해야 할 부분이 있습니까?


도움이 필요하십니까?