「这是我参与11月更文挑战的第17天,活动详情查看:2021最后一次更文挑战」。
pubsub 模式
顾名思义,即发布订阅模式(类似生产消费者模式)。订阅者创建一个 channel 并订阅它,发布者将消息发布到指定 channel 中,这样订阅者就能从这个 channel 中获取消息,从而完成整个订阅发布流程。
订阅
channel 的创建由订阅者在订阅过程中创建。
在 terminal 1 中进行订阅操作。
127.0.0.1:6379> SUBSCRIBE c1
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "c1"
3) (integer) 1
- 第一步理解为提示
- 第二步理解为返回值
- 第三部理解为返回码
发布
在 terminal 2 中进行发布操作。
127.0.0.1:6379> PUBLISH c1 halo
(integer) 1
127.0.0.1:6379> PUBLISH c1 haha
(integer) 1
以上,我们向 c1 channel 中发布了两条消息,分别为 halo 和 haha。
在 terminal 1 中查看消息。
1) "message"
2) "c1"
3) "halo"
1) "message"
2) "c1"
3) "haha"
如上,订阅者收到了两条
message类型的数据,返回值分别为发布者发布的两条消息。
查询 channel
127.0.0.1:6379> PUBSUB channels
1) "c1"
其他操作&命令
# 批量订阅指定模式的频道
PSUBSCRIBE c1 c2
# 批量订阅多个频道
SUBSCRIBE c1 c2
# 批量退订
PUNSUBSCRIBE c1 c3
事务
事务可以一次执行多条命令。其有几个特点:
- 批量命令在
EXEC命令前加入队列缓存。 - 在
EXEC执行过程中,一个命令失败,其他命令继续执行。 - 在执行事务过程中,其他客户端提交的明林不会插入到事务队列中。
事务实践
我们计划在事务中执行多条命令,查看其运行结果。
127.0.0.1:6379> multi
OK
127.0.0.1:6379> set name fly
QUEUED
127.0.0.1:6379> get name
QUEUED
127.0.0.1:6379> get err
QUEUED
127.0.0.1:6379> del name
QUEUED
127.0.0.1:6379> exec
1) OK
2) "fly"
3) (nil)
4) (integer) 1
127.0.0.1:6379>
如上,在进入事务模式后,输入了
4条命令,在exec执行后才出发事务4条命令的执行。
执行过程中如何放弃事务
命令:DISCARD
127.0.0.1:6379> multi
OK
127.0.0.1:6379> set h name
QUEUED
127.0.0.1:6379> discard
OK
127.0.0.1:6379> get h
(nil)
127.0.0.1:6379>
如上,事务中的
set h name命令在discard后没有执行。