项目使用jedis,执行lua脚本报错:No way to dispatch this command to Redis Cluster because keys have different slots.
jedis版本如下
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>3.6.3</version>
</dependency>
查了下报错原因,是JedisCluster不支持涉及不同slot上多个key的脚本,于是切lettuce
lettuce版本如下
<dependency>
<groupId>io.lettuce</groupId>
<artifactId>lettuce-core</artifactId>
<version>6.2.3.RELEASE-h1</version>
</dependency>
切完还是报错:io.lettuce.core.RedisCommandExecutionException: CROSSSLOT Keys in request don't hash to the same slot
原因
在集群拓扑中,keyspace 被划分为哈希槽,不同的节点将持有哈希槽的子集。涉及多个键的多键操作、事务或Lua脚本只有在所有涉及的键都在属于同一节点的哈希槽中时才被允许
解决方案
哈希标签是一种确保多个键分配在同一个哈希槽中的方法。这是为了在Redis Cluster中实现多键操作
为了实现散列标签,在某些条件下,key的散列槽的计算方式略有不同。如果键包含“{...}”模式,则只对{和}之间的子字符串进行哈希运算,以获得哈希槽