Я не понимаю, как кластер Redis с одним осколком может привести к ошибке CROSSSLOT. Согласно документации, эта ошибка возникает, когда вы вводите команду, которая влияет на несколько ключей, которые не все находятся в одном и том же хэш-слоте (то есть узле в сегментированной среде). Учитывая, что один шард имеет только один слот; 0-16383 - а значит, и все данные - как это может случиться?
В моем случае у меня один шард с одной репликой для чтения (ведомый).
Я обошел проблему, используя хэш-теги, как описано здесь: https://redis.io/topics/cluster-spec - однако это не отвечает на вопрос.
Это результат работы CLUSTER NODES:
e51c5f84e60116be3cb9d6734fc0c4deb1fde4c4 172.31.6.149:6379@1122 slave c07ed67b7df1a9d4475702c944a43ad38c6954ba 0 1531143884198 1 connected
c07ed67b7df1a9d4475702c944a43ad38c6954ba 172.31.21.122:6379@1122 myself,master - 0 0 1 connected 0-16383
Я могу воспроизвести ошибку так:
telnet 172.31.21.122 6379
SETEX redis-test-1 3600 whatever
+OK
SETEX redis-test-2 3600 whatever
+OK
KEYS redis-test*
*2
$12
redis-test-2
$12
redis-test-1
DEL redis-test-1 redis-test-2
-CROSSSLOT Keys in request don't hash to the same slot