Redis设计与实现读书笔记---发布订阅/事务/排序/慢查询

发布与订阅

当一个Redis客户端执行PUBLISH 命令将消息message发送给频道channel时,服务器执行如下动作:

  1. 将消息message发送给channel频道所以订阅者‘
  2. 如果有一个或多个模式pattern与频道channel相匹配,那么消息message发送给pattern模式的订阅者;

命令

PUBSUB CHANNELS [pattern]:返回服务器当前被订阅的频道;

PUBSUB NUMSUB [channel-1 channel-2 channel-n]:接收任意多个频道作为输入参数,并返回这些频道的订阅者数量;

PUBSUB NUMPAT:返回服务器当前被订阅模式的数量;

事务

Redis通过MULTI、EXEC、WATCH等命令来实现事务功能;事务提供了一种将多个命令请求打包,然后一次性、按顺序地执行多个命令的机制,并且在事务执行期间,服务器不会中断事务去执行其他客户端的命令请求,只有当事务中的所有命令都执行完毕后,才会去处理其他客户端的命令请求;

MULTI:开启事务

EXEC:执行并提交事务

WATCH:监视具体的变量

WATCH命令是一个乐观锁(optimistic locking),可以在EXEC命令执行前,监视任意数量的数据库键,并在执行EXEC命令前,检查被监视的键是否至少有一个已经被修改,如果存在被修改的键,那么服务器拒绝主席事务,并向客户端返回代表事务执行失败的空回复。

事务的实现

一个事务从开始到结束通常经历三个阶段:

  1. 事务开始:通过MULTI命令执行标志着事务的开始;
  2. 命令入队;
  3. 事务执行;

Redis的事务和传统的关系型数据库事务最大的区别在于,Redis不支持事务回滚机制(rollback),即使事务队列中的某个命令执行出错,这个事务也会继续向下执行,不会回滚。

Lua脚本

  1. Redis服务器启动时,会对内嵌的Lua环境执行一系列修改,确保内嵌的环境可以满足Redis在功能性、安全性方面的需要;
  2. Redis服务器专门使用一个伪客户端来执行Lua脚本中包含的Redis命令;
  3. Redis使用脚本字典来保存所有被EVAL命令执行过,或被SCRIPT LOAD命令载入过的Lua脚本,这些脚本可以实现SCRIPT EXISTS命令,以及实现脚本复制功能;

排序

SORT命令可以对列表键、集合键或者有序集合键的值进行排序;

命令

SORT :对一个包含数字值得键key进行排序;

SORT ALPHA:对一个包含三个字符串值得集合键进行排序;

SORT ASC/DESC:排序后得结果按值得大小从小到大排列或者从达到小排列;

SORT BY :指定某些字符串键,或者某个哈希键锁包含得某些域来作为元素的权重,对一个键进行排序;

LIMIT :返回命令响应中的一部分结果

SORT STORE :将排序的结果存入键中存储,后续直接使用;

命令格式:SORT ALPHA DESC BY LIMIT GET STORE <store_key>

慢查询日志

Redis的慢查询日志功能用于记录执行时间超过给定时长的命令请求,用户可以通过这个功能产生的日志来监视和优化查询速度;

配置选项:

  1. slowlog-log-slower-than:指定执行时间超过多少微秒的命令请求会被记录到日志上;
  2. slowlog-max-len:指定服务器最多保存多少条慢查询日志;

eg:CONFIG SET slowlog-log-slower-than 0

​ CONFIG SET slowlog-max-len 5

SLOWLOG GET:查看服务器所保存的慢查询日志;

监视器

通过执行MONITOR命令,客户端可以将自己变成一个监视器,实时地接收并打印服务器当前处理的命令请求的相关信息。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值