내용으로 건너뛰기

ElastiCache(Redis OSS) 자체 설계 클러스터에서 다중 키 작업을 사용할 때 발생하는 CROSSSLOT 오류를 해결하려면 어떻게 해야 합니까?

2분 분량
0

클러스터 모드가 활성화된 Amazon ElastiCache(Redis OSS) 자체 설계 클러스터에서 다중 키 작업을 사용하고 싶습니다. 하지만 ‘CROSSSLOT Keys in request don’t hash to the same slot’ 오류가 발생합니다.

간략한 설명

키가 동일한 노드에 저장되어 있더라도 동일한 해시 슬롯에 있지 않은 경우 다음과 같은 오류가 발생합니다.

"CROSSSLOT Keys in request don't hash to the same slot"

클러스터 모드가 활성화된 샤드 처리 ElastiCache(Redis OSS) 클러스터에서 다중 키 작업을 구현하려면 키를 동일한 해시 슬롯에 해시하십시오.

다음 예제 세트에서 **"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

해결 방법

방법 1

클러스터 모드가 활성화된 Redis 클러스터를 지원하는 Redis 클라이언트 라이브러리를 사용할 수 있습니다. 자세한 내용은 Redis 웹 사이트에서 Redis 클러스터 사양을 참조하십시오.

다음 예제에서는 redis-cli를 사용하여 다른 샤드에 있는 슬롯에서 키를 가져옵니다. 이로 인해 CROSSSLOT 오류가 발생합니다.

redis-cli -c -h RedisclusterCfgEndpointRedisclusterCfgEndpoint:6379> mget key1 key2
(error) CROSSSLOT Keys in request don't hash to the same slot

redis-py-cluster를 사용하여 서로 다른 샤드에 있는 슬롯에서 키를 가져오면 올바른 출력을 받습니다.

>>> from rediscluster import RedisCluster>>> startup_nodes = [{"host": "RedisclusterCfgEndpoint", "port": "6379"}]
>>> rc = RedisCluster(startup_nodes=startup_nodes, decode_responses=True,skip_full_coverage_check=True)
>>> print(rc.mget("key1","key2"))

방법 2

클러스터 모드가 활성화된 클러스터에서 다중 키 작업을 위한 키를 생성할 때는 키를 동일한 해시 슬롯에 강제로 적용합니다. 해시태그를 사용하여 키를 동일한 해시 슬롯에 강제로 적용할 수 있습니다. 키에 {...} 패턴이 포함된 경우, 중괄호 {} 사이의 하위 문자열만 해시되어 해시 슬롯을 계산합니다.

다음은 동일한 해시 슬롯에 해시되는 여러 세트의 예입니다. {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 공식업데이트됨 2년 전
댓글 없음

관련 콘텐츠