相关演示代码如下:
// 执行有序集合范围及交并集相关操作 func executeZsetMutiOperation(conn redis.Conn) { // 删除原有值 handleResult(redis.Int(conn.Do("DEL", "zset_1", "zset_2", "destination"))) // 初始化 handleResult(redis.Int(conn.Do("ZADD", "zset_1", 1, "a", 2, "b", 3, "c"))) handleResult(redis.Int(conn.Do("ZADD", "zset_2", 2, "b", 3, "c", 4, "d"))) // 返回升序分值在 [1, 2] 范围内的元素,并且返回分值,输出 -> map[a:1 b:2] handleResult(redis.StringMap(conn.Do("ZRANGEBYSCORE", "zset_1", "1", "2", "WITHSCORES"))) // 返回降序分值在 [4, 3] 范围内的元素,并且返回分值,输出 -> map[c:3 d:4] handleResult(redis.StringMap(conn.Do("ZREVRANGEBYSCORE", "zset_2", "4", "3", "WITHSCORES"))) // 移除升序排名在 [1, 1] 范围内的元素,输出 -> 1,zset_1 变为 -> ["b":2, "c":3] handleResult(redis.Int(conn.Do("ZREMRANGEBYRANK", "zset_1", "1", "1"))) // 移除降序排名在 [2, 2] 范围内的元素,输出 -> 1,zset_2 变为 -> ["c":3, "d":4] handleResult(redis.Int(conn.Do("ZREMRANGEBYSCORE", "zset_2", "2", "2"))) // 求 2 个有序集合的交集,权重分别为 2, 3,分值默认采用加法 // 并存储到 destination 中,输出 -> 1,destination 变为 -> handleResult(redis.Int(conn.Do("ZINTERSTORE", "destination", 2, "zset_1", "zset_2", "WEIGHTS", 2, 3))) // 求 2 个有序集合的并集,权重分别为 2, 3,分值指定采用最大值 // 并存储到 destination 中,输出 -> 3,destination 变为 -> ["a":2, "c":9, "d":12] handleResult(redis.Int(conn.Do("ZUNIONSTORE", "destination", 2, "zset_1", "zset_2", "WEIGHTS", 2, 3, "AGGREGATE", "MAX"))) } 所思所想
这一章又是比较枯燥的命令介绍,不过还是坚持看下来了,发现还是挺有用的,有很多平常没接触的命令,也没想到 Redis 竟然这么强大。
即使时比较精细地阅读,也不需要全部阅读,可以快速浏览已经知道的基础,重点还是要放在不知道的地方,带着思考去阅读,先想然后用实践验证。
本文首发于公众号:满赋诸机(点击查看原文) 开源在 GitHub :reading-notes/redis-in-action