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"

可见进行了模式匹配。

站长俱乐部购物系统
站长俱乐部购物系统

功能介绍:1、模块化的程序设计,使得前台页面设计与程序设计几乎完全分离。在前台页面采用过程调用方法。在修改页面设计时只需要在相应位置调用设计好的过程就可以了。另外,这些过程还提供了不同的调用参数,以实现不同的效果;2、阅读等级功能,可以加密产品,进行收费管理;3、可以完全可视化编辑文章内容,所见即所得;4、无组件上传文件,服务器无需安装任何上传组件,无需支持FSO,即可上传文件。可限制文件上传的类

下载

模式退订的命令为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命令可以将一个客户端变成监视器,实时打印当前的操作。

相关专题

更多
Golang channel原理
Golang channel原理

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

246

2025.11.14

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

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

342

2025.11.17

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

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

973

2023.11.02

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

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

633

2023.11.14

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

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

480

2024.04.02

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

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

399

2024.04.07

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

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

391

2024.04.07

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

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

447

2024.04.07

PS使用蒙版相关教程
PS使用蒙版相关教程

本专题整合了ps使用蒙版相关教程,阅读专题下面的文章了解更多详细内容。

23

2026.01.19

热门下载

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

精品课程

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

共48课时 | 7.4万人学习

Git 教程
Git 教程

共21课时 | 2.8万人学习

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

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