Redis基础实践

136 阅读2分钟

「这是我参与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
  1. 第一步理解为提示
  2. 第二步理解为返回值
  3. 第三部理解为返回码

发布

terminal 2 中进行发布操作。

127.0.0.1:6379> PUBLISH c1 halo
(integer) 1
127.0.0.1:6379> PUBLISH c1 haha
(integer) 1

以上,我们向 c1 channel 中发布了两条消息,分别为 halohaha

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

事务

事务可以一次执行多条命令。其有几个特点:

  1. 批量命令在 EXEC 命令前加入队列缓存。
  2. EXEC 执行过程中,一个命令失败,其他命令继续执行。
  3. 在执行事务过程中,其他客户端提交的明林不会插入到事务队列中。

事务实践

我们计划在事务中执行多条命令,查看其运行结果。

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