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集群取交集,差集,并集的问题。
posted @ 2022-04-07 19:32  站着说话不腰疼  阅读(757)  评论(0)    收藏  举报