相关演示代码如下:
// 执行哈希表类型高级特性相关操作 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)