Reids 散列与有序集合命令使用

彭楷淳发布于 2021-01-25
预计阅读时间 9 分钟
总计 2k
浏览

散列


很多时候,散列就像一个微缩版的 redis ,在本文中,对看到的许多散列命令都会有似曾相识的感觉。

hset

hset 命令可以用来设置 key 指定的哈希集中指定字段的值,如下:

1
2
127.0.0.1:6379> hset k1 h1 v1
(integer) 1

hget

hget 命令可以用来返回 key 指定的哈希集中该字段所关联的值,如下:

1
2
127.0.0.1:6379> hget k1 h1
"v1"

hmset

hmset 命令可以批量设置 key 指定的哈希集中指定字段的值,如下:

1
2
127.0.0.1:6379> hmset k2 h1 v1 h2 v2 h3 v3
OK

hmget

hmget 可以批量返回 key 指定的哈希集中指定字段的值,如下:

1
2
3
4
127.0.0.1:6379> hmget k2 h1 h2 h3
1) "v1"
2) "v2"
3) "v3"

hdel

hdel 命令可以从 key 指定的哈希集中移除指定的域,在哈希集中不存在的域将被忽略,如下:

1
2
3
4
5
6
7
8
9
10
127.0.0.1:6379> hmget k2 h1 h2 h3
1) "v1"
2) "v2"
3) "v3"
127.0.0.1:6379> hdel k2 h1
(integer) 1
127.0.0.1:6379> hmget k2 h1 h2 h3
1) (nil)
2) "v2"
3) "v3"

hsetnx

hsetnx 命令只在 key 指定的哈希集中不存在指定的字段时,设置字段的值,如果字段已存在,该操作无效果。如下:

1
2
3
4
127.0.0.1:6379> hsetnx k2 h3 1
(integer) 0
127.0.0.1:6379> hsetnx k2 h4 1
(integer) 1

hvals

hvals 命令可以返回 key 指定的哈希集中所有字段的值,如下:

1
2
3
4
127.0.0.1:6379> hvals k2
1) "v2"
2) "v3"
3) "1"

hkeys

hkeys 命令可以返回 key 指定的哈希集中所有字段的名字,如下:

1
2
3
4
127.0.0.1:6379> hkeys k2
1) "h2"
2) "h3"
3) "h4"

hgetall

hgetall 命令可以返回 key 指定的哈希集中所有的字段和值。返回值中,每个字段名的下一个是它的值,所以返回值的长度是哈希集大小的两倍,如下:

1
2
3
4
5
6
7
127.0.0.1:6379> hgetall k2
1) "h2"
2) "v2"
3) "h3"
4) "v3"
5) "h4"
6) "1"

hexists

hexists 命令可以返回 hash 里面 field 是否存在,如下:

1
2
127.0.0.1:6379> hexists k2 h3
(integer) 1

hincrby

hincrby 可以增加 key 指定的哈希集中指定字段的数值。如果 key 不存在,会创建一个新的哈希集并与 key 关联。如果字段不存在,则字段的值在该操作执行前被设置为 0, hincrby 支持的值的范围限定在 64 位有符号整数,如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
127.0.0.1:6379> hexists k2 h3
(integer) 1
127.0.0.1:6379>
127.0.0.1:6379> hget k2 h4
"1"
127.0.0.1:6379> hincrby k2 h4 5
(integer) 6
127.0.0.1:6379> hget k2 h4
"6"
127.0.0.1:6379> hget k2 h5
(nil)
127.0.0.1:6379> hincrby k2 h5 99
(integer) 99
127.0.0.1:6379> hget k2 h5
"99"

hincrbyfloat

hincrbyfloat 与 hincrby 用法基本一致,只不过这里允许 float 类型的数据,不赘述。

hlen

hlen 返回 key 指定的哈希集包含的字段的数量,如下:

1
2
127.0.0.1:6379> hlen k2
(integer) 4

hstrlen

hstrlen 可以返回 hash 指定 field 的 value 的字符串长度,如果 hash 或者 field 不存在,返回 0 ,如下:

1
2
127.0.0.1:6379> hstrlen k2 h2
(integer) 2

有序集合


有序集合类似 Sets ,但是每个字符串元素都关联到一个叫 score 浮动数值。里面的元素总是通过 score 进行着排序,因此它是可以检索的一系列元素。

zadd

zadd 命令可以将所有指定成员添加到键为 key 的有序集合里面。添加时可以指定多个分数/成员(score/member)对。 如果指定添加的成员已经是有序集合里面的成员,则会更新该成员的分数(scrore)并更新到正确的排序位置。如下:

1
2
127.0.0.1:6379> zadd k1 60 v1
(integer) 1

zscore

zscore 命令可以返回有序集 key 中,成员 member 的score 值。如下:

1
2
127.0.0.1:6379> zscore k1 v1
"60"

zrange

zrange 命令可以根据 index 返回 member ,该命令在执行时加上 withscores 参数可以连同 score 一起返回:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
127.0.0.1:6379> zrange k1 0 3
1) "v1"
2) "v2"
3) "v3"
4) "v4"
127.0.0.1:6379> zrange k1 0 3 withscores
1) "v1"
2) "60"
3) "v2"
4) "70"
5) "v3"
6) "80"
7) "v4"
8) "90"

zrevrange

zrevrange 和 zrange 功能基本一致,不同的是 zrevrange 是反着来的,如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
127.0.0.1:6379> zrevrange k1 0 3
1) "v5"
2) "v4"
3) "v3"
4) "v2"
127.0.0.1:6379> zrevrange k1 0 3 withscores
1) "v5"
2) "100"
3) "v4"
4) "90"
5) "v3"
6) "80"
7) "v2"
8) "70"

zcard

zcard 命令可以返回 key 的有序集元素个数。如下:

1
2
127.0.0.1:6379> zcard k1
(integer) 5

zcount

zcount 命令可以返回有序集 key 中,score 值在 min 和 max 之间(默认包括 score 值等于 min 或 max )的成员。如下:

1
2
127.0.0.1:6379> zcount k1 60 90
(integer) 4

如果在统计时,不需要包含 60 或者 90 ,则添加一个 ( 即可,如下:

1
2
127.0.0.1:6379> zcount k1 60 (90
(integer) 3

zrangebyscore

zrangebyscore 命令可以按照 score 范围范围元素,加上 withscores 可以连 score 一起返回。如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
127.0.0.1:6379> zrangebyscore k1 60 80
1) "v1"
2) "v2"
3) "v3"
127.0.0.1:6379> zrangebyscore k1 60 80 withscores
1) "v1"
2) "60"
3) "v2"
4) "70"
5) "v3"
6) "80"
127.0.0.1:6379> ZRANGEBYSCORE k1 (60 80 withscores
1) "v2"
2) "70"
3) "v3"
4) "80"

zrank

zrank 命令可以返回有序集 key 中成员 member 的排名。其中有序集成员按 score 值递增(从小到大)顺序排列。排名以 0 为底,即 score 值最小的成员排名为 0 。如下:

1
2
3
4
127.0.0.1:6379> zrank k1 v1
(integer) 0
127.0.0.1:6379> zrank k1 v2
(integer) 1

zrevrank

zrevrank 和 zrank 命令功能基本一致,不同的是,zrevrank 中的排序是从大到小:

1
2
3
4
127.0.0.1:6379> zrevrank k1 v1
(integer) 4
127.0.0.1:6379> zrevrank k1 v2
(integer) 3

zincrby

zincrby 命令可以为有序集 key 的成员 member 的 score 值加上增量 increment 。如果 key 中不存在 member ,就在 key 中添加一个 member ,score 是 increment(就好像它之前的 score 是0.0)。如果 key 不存在,就创建一个只含有指定 member 成员的有序集合:

1
2
3
4
5
127.0.0.1:6379> zincrby k1 3 v1
"63"
127.0.0.1:6379> zincrby k1 0 0 withscores
1) "v1"
2) "63"

zinterstore

zinterstore 命令可以计算给定的 numkeys 个有序集合的交集,并且把结果放到 destination 中。 在给定要计算的 key 和其它参数之前,必须先给定 key 个数( numberkeys )。该命令也可以在执行的过程中给原 score 乘以 weights 后再求和,如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
127.0.0.1:6379> zadd k2 2 v1
(integer) 1
127.0.0.1:6379> zadd k2 3 v2
(integer) 1
127.0.0.1:6379> zadd k2 4 v3
(integer) 1
127.0.0.1:6379> zadd k3 9 v2
(integer) 1
127.0.0.1:6379> zadd k3 10 v3
(integer) 1
127.0.0.1:6379> zadd k3 11 v4
(integer) 1
127.0.0.1:6379> zinterstore k4 2 k2 k3
(integer) 2
127.0.0.1:6379> zrange k4 0 -1 withscores
1) "v2"
2) "12"
3) "v3"
4) "14"
127.0.0.1:6379> zinterstore k5 2 k2 k3 weights 3 1
(integer) 2
127.0.0.1:6379> zrange k5 0 -1 withscores
1) "v2"
2) "18"
3) "v3"
4) "22"

zrem

zrem 命令可以从集合中弹出一个元素,如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
127.0.0.1:6379> zrange k2 0 -1 withscores
1) "v1"
2) "2"
3) "v2"
4) "3"
5) "v3"
6) "4"
127.0.0.1:6379> zrem k2 v1
(integer) 1
127.0.0.1:6379> zrange k2 0 -1 withscores
1) "v2"
2) "3"
3) "v3"
4) "4"

zlexcount

zlexcount 命令用于计算有序集合中指定成员之间的成员数量。如下:

1
2
3
4
127.0.0.1:6379> zlexcount k2 - +
(integer) 2
127.0.0.1:6379> zlexcount k2 [v2 [v4
(integer) 2

注意:可以用 -+ 表示得分最小值和最大值,如果使用成员名的话,一定要在成员名之前加上 [ 。

zrangebylex

zrangebylex 返回指定成员区间内的成员,按成员字典正序排序, 分数必须相同。如下:

1
2
3
4
5
6
7
127.0.0.1:6379> zrangebylex k2 [v2 [v4
1) "v2"
2) "v3"
127.0.0.1:6379> zrangebylex k2 - +
1) "v2"
2) "v3"
127.0.0.1:6379>

注意 min 和 max 参数的写法和 zlexcount一致。

更多干货请移步:https://antoniopeng.com


如果你喜欢这个博客或发现它对你有用,欢迎你点击右下角 “OPEN CHAT” 进行评论。也欢迎你分享这个博客,让更多的人参与进来。如果在博客中使用的图片侵犯了您的版权,请联系博主删除它们。谢谢你!