一、 文档介绍
今日在项目里写了一份简单的redis两个set类型求并集的操作
不断报错,在网上查到的资料里都简单介绍了自带的API接口,但是这个并不是所有时间都好用的,甚至可以说对分布式而非主机redis来讲基本上都是不好用的
二、网传解决办法
我的代码
func ListUnion2() ([]string, error){ res, err := redisClient.SUnion(DB_SET, List_Only_Dump).Result() DBIgnoreRedisNil(err) return res, err }
三、报错原因
WARN CROSSSLOT Keys in request don‘t hash to the same slot
报错如上图所示,意思是“无法将请求中的CROSS SLOT密匙哈希写入同一槽中”
首先我们简单理解一下,Key我们称为密匙,我们要对两个不同的密匙进行操作不仅要求两个密匙位于相同的节点上,还要求位于相同的哈希槽中,报错的原因就是因为两个密匙不位于相同的哈希槽中,解决办法见下面??
四、简单理解Redis Cluster读写过程
func ListUnion() ([]string, error){ redisClient.Del(Union_List) res := []string{} dbList, err := redisClient.SMembers(DB_SET).Result() if err != nil{ return res, err } onlyDumpList, err := redisClient.SMembers(List_Only_Dump).Result() if err != nil{ return res, err } for _, dbName := range dbList{ _, err := redisClient.SAdd(Union_List, dbName).Result() if err != nil{ return res, err } } for _, dbName := range onlyDumpList{ _, err := redisClient.SAdd(Union_List, dbName).Result() if err != nil{ return res, err } } res, err = redisClient.SMembers(Union_List).Result() return res, err }
原文:https://www.cnblogs.com/Flower-Z/p/10453104.html