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
后没有执行。