Redis 实战 —— 04. Redis 数据结构常用命令简介 (5)

相关演示代码如下:

// 执行哈希表类型高级特性相关操作 func executeHashFeatureOperation(conn redis.Conn) { // 删除原有值 handleResult(redis.Int(conn.Do("DEL", "hash"))) // 初始化 handleResult(redis.String(conn.Do("HMSET", "hash", "field_1", "value_1", "field_2", "value_2", "field_3", "3"))) // 判断 field 是否存在于哈希表中,输出 -> 1 handleResult(redis.Int(conn.Do("HEXISTS", "hash", "field_1"))) // 返回哈希表中所有的 field,输出 -> [field_1 field_2 3] handleResult(redis.Strings(conn.Do("HKEYS", "hash"))) // 返回哈希表中所有 field 的值,输出 -> [value_1 value_2 value_3] handleResult(redis.Strings(conn.Do("HVALS", "hash"))) // 返回哈希表中所有的 field 及其值,输出 -> map[field_1:value_1 field_2:value_2 field_3:3] handleResult(redis.StringMap(conn.Do("HGETALL", "hash"))) // 将哈希表中 field 的值增加 1,输出 -> 4,field_3 的值变为 -> 4 handleResult(redis.Int(conn.Do("HINCRBY", "hash", "field_3", 1))) // 将哈希表中 field 的值增加 -1.5,输出 -> 2.5,field_3 的值变为 -> 2.5 handleResult(redis.Float64(conn.Do("HINCRBYFLOAT", "hash", "field_3", -1.5))) }

如果哈希表包含的值非常大,可以先使用 HKEYS 取出所有的 field,然后再使用 HGET 取出值,防止一次取出多个大体积的值而导致服务器阻塞。 P48

有序集合 P48 一些常用的有序集合命令 P49 命令 格式 描述
ZADD   ZADD key socre member [score member ...]   向有序集合中添加一个或多个元素及其分值  
ZREM   ZREM key member [member ...]   从有序集合中删除一个或多个元素及其分值  
ZCARD   ZCARD key   返回有序集合中元素的个数  
ZINCRBY   ZINCRBY key increment member   给有序集合中的元素的分值增加 increment  
ZCOUNT   ZCOUNT key min max   返回分值在 [min, max] 范围内的元素的数量  
ZRANK   ZRANK key member   返回元素的升序排名(升序,从 0 开始)  
ZREVRANK   ZREVRANK key member   返回元素的降序排名(降序,从 0 开始)  
ZSCORE   ZSCORE key member   返回元素的排名的分值  
ZRANGE   ZRANGE key start stop [WITHSCORES]   返回升序排名在 [start, stop] 范围内的元素,WITHSCORES 选项会同时在相应的元素后返回分值  
ZRANRANGE   ZRANGE key start stop [WITHSCORES]   返回降序排名在 [start, stop] 范围内的元素,WITHSCORES 选项会同时在相应的元素后返回分值  

相关演示代码如下:

// 执行有序集合相关操作 func executeZsetOperation(conn redis.Conn) { // 删除原有值 handleResult(redis.Int(conn.Do("DEL", "zset"))) // 有序集合中添加 5 个元素及其分值,输出 -> 5,zset 变为 -> ["a":1, "b":2, "c":3, "d":4, "e":5] handleResult(redis.Int(conn.Do("ZADD", "zset", 1, "a", 2, "b", 3, "c", 4, "d", 5, "e"))) // 有序集合中删除 3 个元素及其分值,输出 -> 2,zset 变为 -> ["a":1, "b":2, "c":3] handleResult(redis.Int(conn.Do("ZREM", "zset", "d", "e", "f"))) // 返回有序集合的元素个数,输出 -> 3 handleResult(redis.Int(conn.Do("ZCARD", "zset"))) // 给有序集合中的元素的分值增加 0.5,输出 -> 1.5,a 的值变为 -> 1.5 handleResult(redis.Int(conn.Do("ZINCRBY", "zset", 1, "a"))) // 给有序集合中的元素的分值增加 -1.5,输出 -> 0.5,a 的值变为 -> 0.5 handleResult(redis.Float64(conn.Do("ZINCRBY", "zset", -1.5, "a"))) // 返回分值在 [1, 3] 范围内的元素的数量,输出 -> 2 handleResult(redis.Int(conn.Do("ZCOUNT", "zset", 1, 3))) // 返回元素的升序排名(升序,从 0 开始),输出 -> 0 handleResult(redis.Int(conn.Do("ZRANK", "zset", "a"))) // 返回元素的降序排名(降序,从 0 开始),输出 -> 2 handleResult(redis.Int(conn.Do("ZREVRANK", "zset", "a"))) // 返回元素的排名的分值,输出 -> 0.5 handleResult(redis.Float64(conn.Do("ZSCORE", "zset", "a"))) // 返回升序排名在 [1, 2] 范围内的元素,并且返回分值,输出 -> map[b:2 c:3] handleResult(redis.StringMap(conn.Do("ZRANGE", "zset", "1", "2", "WITHSCORES"))) // 返回降序排名在 [1, 2] 范围内的元素,并且返回分值,输出 -> map[a:0.5 b:2] handleResult(redis.StringMap(conn.Do("ZREVRANGE", "zset", "1", "2", "WITHSCORES"))) } 有序集合的范围性命令及并交集命令 P50 命令 格式 描述
ZRANGEBYSCORE   ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]   返回升序分值在 [min, max] 范围内的元素,WITHSCORES 选项会同时在相应的元素后返回分值  
ZREVRANGEBYSCORE   ZREVRANGEBYSCORE key max min [WITHSCORES] [LIMIT offset count]   返回降序分值在 [max, min] 范围内的元素,WITHSCORES 选项会同时在相应的元素后返回分值  
ZREMRANGEBYRANK   ZREMRANGEBYRANK key start stop   移除升序排名在 [start, stop] 范围内的元素  
ZREMRANGEBYSCORE   ZREMRANGEBYSCORE key min max   移除升序分值在 [min, max] 范围内的元素  
ZINTERSTORE   ZINTERSTORE destination numkeys key [key ...] [WEIGHTS weight [weight ...]]  [AGGREGATE SUM|MIN|MAX]   求一个或多个(有序)集合的交集,并存储到 destination 中,WEIGHTS 权重存在时,weight 数量必须等于 numkeys(集合默认分值为 1)  
ZUNIONSTORE   ZUNIONSTORE destination numkeys key [key ...] [WEIGHTS weight [weight ...]]  [AGGREGATE SUM|MIN|MAX]   求一个或多个(有序)集合的并集,并存储到 destination 中,WEIGHTS 权重存在时,weight 数量必须等于 numkeys(集合默认分值为 1)  

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wppjdp.html