bboyjing's blog

Redis学习笔记五【Redis命令(二)】

散列(HASH)

常用命令:

命令 描述
HMGET 从散列中获取一个或多个值
HMSET 为散列中的一个或多个键设值
HDEL 删除散列中一个或多个值,返回成功删除的键值对数量
HLEN 返回散列包含的键值对数量
1
2
3
4
5
6
7
8
9
10
11
12
13
14
//批量设值
127.0.0.1:6379> hmset hash-key k1 v1 k2 v2 k3 v3
OK
//批量获取值
127.0.0.1:6379> hmget hash-key k1 k2 k3
1) "v1"
2) "v2"
3) "v3"
//获取键值对数量
127.0.0.1:6379> hlen hash-key
(integer) 3
//删除键值对
127.0.0.1:6379> hdel hash-key k1 k2
(integer) 2

下面再列出散列的其他几个批量操作命令:

命令 描述
HEXISTS 检查给定键是否存在于散列中
HKEYS 获取散列包含的所有键
HVALS 获取散列包含的所有值
HGETALL 获取散列包含的所有键值对
HINCRBY 将键存储的值加上给定整数
HINCRBYFLOAT 将键存储的值加上给定浮点数
1
2
3
4
5
6
7
8
9
10
11
12
13
14
127.0.0.1:6379> hmset hash-key2 k1 hello k2 world
OK
//获取散列中所有键
127.0.0.1:6379> hkeys hash-key2
1) "k1"
2) "k2"
//检查给定键是否存在于散列中
127.0.0.1:6379> hexists hash-key2 num
(integer) 0
// 将键存储的值加1
127.0.0.1:6379> hincrby hash-key2 num 1
(integer) 1
127.0.0.1:6379> hexists hash-key2 num
(integer) 1

有序集合(ZSET)

常用的有序集合命令:

命令 描述
ZADD 将带有给定分值的成员添加到有序集合
ZREM 移除给定元素
ZCARD 返回有序集合包含的成员数量
ZINCRBY 将member成员的分值加上给定值
ZCOUNT 返回分值结余min和max之间的成员数量
ZRANK 返回成员member在有序集合中的排名
ZSCORE 返回成员member的分值
ZRANGE 返回有序集合中排名介于start和stop之间的成员
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
127.0.0.1:6379> zadd zset-key 3 a 2 b 1 c
(integer) 3
127.0.0.1:6379> zcard zset-key
(integer) 3
//将c加3,返回c的当前分值
127.0.0.1:6379> zincrby zset-key 3 c
"4"
127.0.0.1:6379> zscore zset-key b
"2"
//排名从0开始
127.0.0.1:6379> zrank zset-key c
(integer) 2
//返回分值0到3的member的数量
127.0.0.1:6379> zcount zset-key 0 3
(integer) 2
127.0.0.1:6379> zrem zset-key b
(integer) 1
127.0.0.1:6379> zrange zset-key 0 -1 withscores
1) "a"
2) "3"
3) "c"
4) "4"

下面再展示另外一些非常有用的有序集合命令:

命令 描述
ZREVRANK 成员按分值逆序排
ZREVRANGE 返回有序集合中排名介于start和stop之间的成员,逆序
ZRANGEBYSCORE 返回有序集合中,分值介于min和max之间的所有成员
ZREVRANGEBYSCORE 返回有序集合中,分值介于min和max之间的所有成员,逆序
ZREMRANGEBYRANK 移除有序集合中排名介于min和max之间的所有成员
ZREMRANGEBYSCORE 移除有序集合中分值介于min和max之间的所有成员
ZINTERSTORE 对有序集合执行类似集合的交集运算
ZUNIONSTORE 对有序集合执行类似集合的并集运算
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
127.0.0.1:6379> zadd zset-1 1 a 2 b 3 c
(integer) 3
127.0.0.1:6379> zadd zset-2 4 b 1 c 0 d
(integer) 1
//zset-1 zset-2都包含的元素的分值求和
127.0.0.1:6379> zinterstore zset-sum 2 zset-1 zset-2
(integer) 2
127.0.0.1:6379> zrange zset-sum 0 -1 withscores
1) "c"
2) "4"
3) "b"
4) "6"
//zset-1 zset-2中所有的元素的分值求和
127.0.0.1:6379> zunionstore zset-union 2 zset-1 zset-2
(integer) 4
127.0.0.1:6379> zrange zset-union 0 -1 withscores
1) "d"
2) "0"
3) "a"
4) "1"
5) "c"
6) "4"
7) "b"
8) "6"

ZINTERSTORE和ZUNIONSTORE的AGGREGATE可选参数为SUM|MIN|MAX,默认为SUM,MIN和MAX可自行测试。

发布订阅(publish/subscribe)

命令 描述
SUBSCRIBE 订阅给定的一个或多个频道
UNSUBSCRIBE 退订给定的频道,若未指定,则退订所有频道
PUBLISH 向给定频道发送消息
PSUBSCRIBE 订阅给定模式相匹配的频道
PUNSUBSCRIBE 退订给定的模式相匹配的频道
1
2
3
4
5
//进程1订阅channel-1
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "channel-1"
3) (integer) 1
1
2
3
//进程2发布消息
127.0.0.1:6379> publish channel-1 echo
(integer) 1
1
2
3
4
5
6
7
8
9
//进程1收到消息
127.0.0.1:6379> subscribe channel-1
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "channel-1"
3) (integer) 1
1) "message"
2) "channel-1"
3) "echo"

由于网络的不稳定性,Redis消息订阅可能会存在丢失消息的风险,后面会学习使用其他方式来编写可靠的消息传递,易用性与可靠性之间的取舍需要使用者自行判断。