首页 > 运维 > linux运维 > 正文

《Redis设计与实现》笔记3

蓮花仙者
发布: 2025-07-16 09:24:01
原创
873人浏览过
  1. 发布与订阅

发布与订阅模式允许客户端订阅一个或多个频道,并在其他客户端向这些频道发送消息时接收到这些消息。具体操作如下:

《Redis设计与实现》笔记3发布与订阅分为两类:频道订阅与退订、模式订阅与退订。

《Redis设计与实现》笔记31.1 频道的订阅与退订频道的订阅命令为subscribe,在第一个终端中输入该命令后,终端会进入等待状态。

127.0.0.1:6379> subscribe news
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "news"
3) (integer) 1
登录后复制

然后,在另一个终端中使用publish命令发布消息:

127.0.0.1:6379> publish news "bbc news"
(integer) 1
127.0.0.1:6379> publish news "雅虎 news"
(integer) 1
127.0.0.1:6379> publish news "bing news"
(integer) 1
127.0.0.1:6379> 
登录后复制

此时,第一个终端会接收到发布的消息:

127.0.0.1:6379> subscribe news
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "news"
3) (integer) 1
1) "message"
2) "news"
3) "bbc news"
1) "message"
2) "news"
3) "\xe9\x9b\x85\xe8\x99\x8e news"
1) "message"
2) "news"
3) "bing news"
登录后复制

退订频道的命令为unsubscribe

127.0.0.1:6379> unsubscribe news
1) "unsubscribe"
2) "news"
3) (integer) 0
127.0.0.1:6379>
登录后复制

Redis的所有频道订阅关系存储在pubsub_channels字典中。

《Redis设计与实现》笔记31.2 模式的订阅与退订模式的订阅命令为psubscribe,在第一个终端中输入该命令后,终端会进入等待状态。

127.0.0.1:6379> psubscribe news.*
Reading messages... (press Ctrl-C to quit)
1) "psubscribe"
2) "news.*"
3) (integer) 1
登录后复制

在第二个终端中发布消息:

127.0.0.1:6379> publish news.it "i am news.it"
(integer) 1
127.0.0.1:6379> 
登录后复制

在第三个终端中发布消息:

127.0.0.1:6379> publish news.et "i am news.et"
(integer) 1
127.0.0.1:6379> 
登录后复制

此时,第一个终端会接收到匹配模式的消息:

127.0.0.1:6379> psubscribe news.*
Reading messages... (press Ctrl-C to quit)
1) "psubscribe"
2) "news.*"
3) (integer) 1
1) "pmessage"
2) "news.*"
3) "news.it"
4) "i am news.it"
1) "pmessage"
2) "news.*"
3) "news.et"
4) "i am news.et"
登录后复制

可见进行了模式匹配。

设计师AI工具箱
设计师AI工具箱

最懂设计师的效率提升平台,实现高效设计出图和智能改图,室内设计,毛坯渲染,旧房改造 ,软装设计

设计师AI工具箱 124
查看详情 设计师AI工具箱

模式退订的命令为punsubscribe

127.0.0.1:6379> punsubscribe news.*
1) "punsubscribe"
2) "news.*"
3) (integer) 0
127.0.0.1:6379>
登录后复制

Redis的所有模式订阅关系存储在pubsub_patterns链表中。

1.3 查看消息pubsub命令有三个子命令:

命令 描述
pubsub channels [pattern] 返回当前被订阅的频道
pubsub numsub [channel...] 返回指定频道的订阅者数量
pubsub numpat 返回当前被订阅模式的数量
127.0.0.1:6379> pubsub channels
1) "news.et"
2) "news"
3) "news.ot"
4) "news.it"
127.0.0.1:6379> pubsub numsub news
1) "news"
2) (integer) 3
127.0.0.1:6379> pubsub numpat
(integer) 2
127.0.0.1:6379>
登录后复制
  1. 事务实现

事务(transaction)的命令包括multiexecwatch,事务开启后必须等待所有命令执行完毕后才会处理其他客户端的命令请求。

a@aMacBook-Pro-92 ~ % redis-cli --raw
127.0.0.1:6379> multi
OK
127.0.0.1:6379(TX)> set key1 "你好"
QUEUED
127.0.0.1:6379(TX)> set key2 "世界"
QUEUED
127.0.0.1:6379(TX)> get key1
QUEUED
127.0.0.1:6379(TX)> get key2
QUEUED
127.0.0.1:6379(TX)> exec
OK
OK
你好
世界
127.0.0.1:6379>
登录后复制

《Redis设计与实现》笔记3watch命令是一个乐观锁,用于监视数据库键,在multi开启后如果有其他客户端修改了被监视的键,则事务执行失败。

127.0.0.1:6379> watch key1
OK
127.0.0.1:6379> multi
OK
127.0.0.1:6379(TX)> set key1 "哈哈"
QUEUED
127.0.0.1:6379(TX)> get key1
QUEUED
127.0.0.1:6379(TX)> exec
(nil)
127.0.0.1:6379> get key1
nihao
登录后复制

上述exec执行后返回nil,表示事务执行失败,因为在multi开启后且exec执行前,另一个终端修改了key1的值为nihao

127.0.0.1:6379> set key1 "nihao"
OK
登录后复制

事务具备四大特性:原子性、一致性、隔离性、持久性。

  1. 慢查询日志

Redis的慢查询日志用于记录执行时间超过指定时长的命令请求,可用于监视和优化查询速度。相关选项包括slowlog-log-slower-than(超过多少微秒的命令会被记录)和slowlog-max-len(最多保存多少条慢查询日志)。

127.0.0.1:6379> config set slowlog-log-slower-than 0
OK
127.0.0.1:6379> config set slowlog-max-len 10
OK
127.0.0.1:6379> set k1 "哈哈"
OK
127.0.0.1:6379> set k2 "嗯嗯"
OK
127.0.0.1:6379> slowlog get
3
1) 1) (integer) 1640683940
   2) (integer) 9
   3) 1) "set"
      2) "k2"
      3) "嗯嗯"
   4) "127.0.0.1:52594"
2) 1) (integer) 1640683916
   2) (integer) 6938
   3) 1) "set"
      2) "k1"
      3) "哈哈"
   4) "127.0.0.1:52594"
3) 1) (integer) 1640683898
   2) (integer) 6
   3) 1) "config"
      2) "set"
      3) "slowlog-max-len"
      4) "10"
   4) "127.0.0.1:52594"
127.0.0.1:6379> slowlog len
5
127.0.0.1:6379> slowlog reset
OK
登录后复制
  1. 监视器

monitor命令可以将一个客户端变成监视器,实时打印当前的操作。

以上就是《Redis设计与实现》笔记3的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号