发布与订阅
当一个Redis客户端执行PUBLISH 命令将消息message发送给频道channel时,服务器执行如下动作:
- 将消息message发送给channel频道所以订阅者‘
- 如果有一个或多个模式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命令前,检查被监视的键是否至少有一个已经被修改,如果存在被修改的键,那么服务器拒绝主席事务,并向客户端返回代表事务执行失败的空回复。
事务的实现
一个事务从开始到结束通常经历三个阶段:
- 事务开始:通过MULTI命令执行标志着事务的开始;
- 命令入队;
- 事务执行;
Redis的事务和传统的关系型数据库事务最大的区别在于,Redis不支持事务回滚机制(rollback),即使事务队列中的某个命令执行出错,这个事务也会继续向下执行,不会回滚。
Lua脚本
- Redis服务器启动时,会对内嵌的Lua环境执行一系列修改,确保内嵌的环境可以满足Redis在功能性、安全性方面的需要;
- Redis服务器专门使用一个伪客户端来执行Lua脚本中包含的Redis命令;
- 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的慢查询日志功能用于记录执行时间超过给定时长的命令请求,用户可以通过这个功能产生的日志来监视和优化查询速度;
配置选项:
- slowlog-log-slower-than:指定执行时间超过多少微秒的命令请求会被记录到日志上;
- slowlog-max-len:指定服务器最多保存多少条慢查询日志;
eg:CONFIG SET slowlog-log-slower-than 0
? CONFIG SET slowlog-max-len 5
SLOWLOG GET:查看服务器所保存的慢查询日志;
监视器
通过执行MONITOR命令,客户端可以将自己变成一个监视器,实时地接收并打印服务器当前处理的命令请求的相关信息。
|