3、redis集群操作交集,差集,并集出现的问题
redis集群操作交集,差集,并集出现的问题
我们使用redis集群添加数据时,redis集群会根据每个key的不同,来对应到没有hash槽位,写入到不同的redis主节点上,虽然我们读取数据的时候,会根据用户请求的可以重定向到对应槽位的redis服务器上,就可以读出来,返回给用户。但是,当我们取交集,差集,并集的时候,两个key如果不在同一个redis服务器上,是不能够读取出来的,会报以下的错误:
redis.clients.jedis.exceptions.JedisClusterOperationException: No way to dispatch this command to Redis Cluster because keys have different slots.
at redis.clients.jedis.JedisClusterCommand.run(JedisClusterCommand.java:39)
at redis.clients.jedis.JedisCluster.sinter(JedisCluster.java:1553)
at cn.zj.test.JedisTest.testJedis(JedisTest.java:56)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
解决方式:我们在存key的时候,将key存在同一台redis服务器上,怎样写入到同一台服务器呢?
- 使用
{regula}1,{regula}2,保证regula是一样的,{}是告诉redis集群,我们需要存入到同一台redis服务器上,就会根据regula来分配槽位,这样就解决了redis集群取交集,差集,并集的问题。

浙公网安备 33010602011771号