【Redis基础】发布与订阅
发布与订阅
1.定义
Redis的发布与订阅是由publish、subscribe、psubscribe等命令组成的
2.频道的订阅与退订
(1)订阅
当一个客户端执行subscribe命令订阅某个频道,该客户端就与被订阅频道之间构成了一种订阅关系。
所有频道的订阅关系保存在服务器状态的pubsub_channel字典里,该字典的键是某个被订阅的频道,值是一个链表,记录了所有订阅这个链表的客户端。
图解
(2)退订
当一个客户端执行unsubscribe命令退订某个频道,该客户端就与被订阅频道就解除了订阅关系。
服务器将从pubsub_channels字典中找到频道对应的链表,从订阅者链表中删除退订客户端的信息
3.模式的订阅与退订
(1)订阅模式
服务器将所有模式的订阅关系都保存在服务器状态的pubsub_patterns属性中。
pubsub_patterns属性是一个链表,链表中的每个节点都包含着一个pubsub_patterns结构
当客户端执行psubscribe命令订阅某个模式时,服务器会新建一个pubsubPattern结构,将结构的pattern属性设置为被订阅的模式,client属性设置为订阅模式的客户端。将pubsubPattern结构添加到pubsub_patterns链表的末尾
图例
(2)退订模式
- 当客户端执行punsubscribe命令时,服务器会在pubsub_patterns链表中查找并删除那些pattern属性是被退订模式,client属性是执行命令的客户端的pubsubPattern结构。
4.发送消息
将消息发送给频道订阅者
若客户端执行publish命令,那将在字典中查找该频道,并通过遍历链表将消息发送给该频道的所有订阅者。将消息发送给模式订阅者
若客户端执行publish命令(模式),那将在pubsub_patterns链表中查找与该模式匹配的频道,将消息发送给匹配的频道订阅者。-
查看订阅消息的三个命令
- pubsub channels :返回服务器当前被订阅的频道
- pubsub numsub:参数可以是任意多个频道,返回某些频道的订阅者数量
- pubsub numpat:返回服务器当前被订阅模式的数量
慢查询日志
1.定义
慢查询日志功能用于记录执行时间超过给定时长的命令请求
2.配置参数
slowlog-log-slower-than:指定执行时间超过多少微秒的命令请求会被记录到日志上。
slowlog-max-len:指定服务器最多保存多少条慢查询日志
注:服务器使用先进先出的方式保存多条慢查询日志信息,添加一条新的慢查询日志之前会将最旧的一条慢查询日志删除。
3.结构
所有的慢查询日志保存在服务器状态的slowlog链表中,每个链表的节点都包含一个slowlogEntry结构,每个slowlogEntry结构代表一条慢查询日志
打印和删除慢查询日志可以通过遍历slowlog链表来完成
slowlog链表的长度就是服务器所保存的慢查询日志的数量
新的慢查询日志会被添加到slowlog链表的表头
虚拟内存
1.定义
暂时把不经常访问的数据从内存交换到磁盘中,
2.作用
在redis中,使用虚拟内存将不经常访问的数据交换到磁盘上,从而提高数据库容量。
3.配置
- Vm-enabled yes :开启vm功能
- Vm-swap-file E:/Redis/vm.swap :交换出来的value保存的文件路径。
- Vm-max-memory 100000 :redis使用的最大内存上限
- Vm-max-threads 4 :用于执行value对象换入的工作线程数量
- Vm-page-size 32 :每个页面的大小是32字节
- Vm-pages 13456 :最多使用多少页面
4.处理策略
内存容量超过maxmemory后的处理策略。
- volatile-lru:利用LRU算法移除设置过过期时间的key。
- volatile-random:随机移除设置过过期时间的key。
- volatile-ttl:移除即将过期的key,根据最近过期时间来删除(辅以TTL)
- allkeys-lru:利用LRU算法移除任何key。
- allkeys-random:随机移除任何key。
- noeviction:不移除任何key,只是返回一个写错误。
监视器
执行monitor命令,客户端就可以将自己变成一个监视器,实时的接收并打印出服务器当前处理的命令请求的相关信息。
服务器将所有的监视器都记录在monitors链表中。
每次处理命令请求时,服务器都会遍历monitors链表,将相关信息发送给监视器。
本人才疏学浅,若有错,请指出,谢谢!
参考书籍:《Redis设计与实现(第二版)》—黄健宏