0

0

《Redis设计与实现》笔记3

蓮花仙者

蓮花仙者

发布时间:2025-07-16 09:24:01

|

880人浏览过

|

来源于php中文网

原创

  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"

可见进行了模式匹配。

Magic AI Avatars
Magic AI Avatars

神奇的AI头像,获得200多个由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命令可以将一个客户端变成监视器,实时打印当前的操作。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
Golang channel原理
Golang channel原理

本专题整合了Golang channel通信相关介绍,阅读专题下面的文章了解更多详细内容。

261

2025.11.14

golang channel相关教程
golang channel相关教程

本专题整合了golang处理channel相关教程,阅读专题下面的文章了解更多详细内容。

351

2025.11.17

常用的数据库软件
常用的数据库软件

常用的数据库软件有MySQL、Oracle、SQL Server、PostgreSQL、MongoDB、Redis、Cassandra、Hadoop、Spark和Amazon DynamoDB。更多关于数据库软件的内容详情请看本专题下面的文章。php中文网欢迎大家前来学习。

1006

2023.11.02

内存数据库有哪些
内存数据库有哪些

内存数据库有Redis、Memcached、Apache Ignite、VoltDB、TimesTen、H2 Database、Aerospike、Oracle TimesTen In-Memory Database、SAP HANA和ache Cassandra。更多关于内存数据库相关问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

671

2023.11.14

mongodb和redis哪个读取速度快
mongodb和redis哪个读取速度快

redis 的读取速度比 mongodb 更快。原因包括:1. redis 使用简单的键值存储,而 mongodb 存储 json 格式的数据,需要解析和反序列化。2. redis 使用哈希表快速查找数据,而 mongodb 使用 b-tree 索引。因此,redis 在需要高性能读取操作的应用程序中是一个更好的选择。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

501

2024.04.02

redis怎么做缓存服务器
redis怎么做缓存服务器

redis 作为缓存服务器的答案:redis 是一款开源、高性能、分布式的键值存储,可作为缓存服务器使用。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

413

2024.04.07

redis怎么解决数据一致性
redis怎么解决数据一致性

redis 提供了两种一致性模型,以维护副本数据一致性:强一致性 (sync) 确保写操作仅在复制到所有从节点后才完成;最终一致性 (async) 则在主节点上写操作后认为已完成,牺牲一致性换取性能。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

408

2024.04.07

mysql和redis怎么保证双写一致性
mysql和redis怎么保证双写一致性

确保 mysql 和 redis 双写一致性的技术包括:1、事务性更新:同时更新 mysql 和 redis,保证一致性;2、主从复制:mysql 主服务器更改同步到 redis 从服务器;3、基于事件的更新:mysql 记录更改并发送到 redis等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

484

2024.04.07

C# ASP.NET Core微服务架构与API网关实践
C# ASP.NET Core微服务架构与API网关实践

本专题围绕 C# 在现代后端架构中的微服务实践展开,系统讲解基于 ASP.NET Core 构建可扩展服务体系的核心方法。内容涵盖服务拆分策略、RESTful API 设计、服务间通信、API 网关统一入口管理以及服务治理机制。通过真实项目案例,帮助开发者掌握构建高可用微服务系统的关键技术,提高系统的可扩展性与维护效率。

76

2026.03.11

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL 教程
PostgreSQL 教程

共48课时 | 10.6万人学习

Git 教程
Git 教程

共21课时 | 4.2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

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