1. 慢查询分析
慢查询日志帮助开发和运维人员定位系统存在的慢操作。
所谓的慢查询日志就是系统在命令执行前后计算每条命令的执行时间,当超过预设阈值,就将这条命令的相关信息记录下来。
![](https://img.haomeiwen.com/i8195112/f569c1b96f81a444.jpg)
1.1 慢查询的两个配置参数
config set slowlog-log-slower-than 20000 //预设阈值
config set slowlog-max-len 1000 //日志列表长度
config rewrite //写入配置文件
1.2 最佳实践
- 线上建议调大慢查询列表
- 默认值为10毫秒,对于高OPS建议设置为1毫秒
- 慢查询只记录命令执行时间
- 慢查询日志是个队列,要定期执行slow get命令将日志持久化到其他存储中
2. Redis Shell
- redis-cli
- redis-server ,--test-memory可以用来检测当前操作系统能否稳定地分配指定容量的内存给Redis
- redis-benchmark,提供基准性能测试
3. Pipeline
redis客户端执行一次命令:
- 发送命令
- 命令排队
- 命令执行
- 返回结果
Pipeline流水线机制能将一组Redis命令进行组装,通过一次RTT传输给Redis。
执行速度比逐条执行要快,而且网络延时越大,Pipieline的效果越明显。
![](https://img.haomeiwen.com/i8195112/9a11a46c5f2da8a5.jpg)
原生批量命令与Pipeline的对比
- 原生批量命令是原子的,pipeline是非原子的
- 原生批量命令是一个命令对应多个key,pipeline支持多个命令
- 原生批量命令是Redis服务端支持实现的,而Pipeline需要客户端和服务端的共同实现
最佳实践
每次pipeline组装的命令个数不能没有节制
4. 事务与Lua
4.1 事务
事务表示一组动作,要么全部执行,要么全部不执行
Redis提供了简单的事务功能,将一组命令放到multi 和 exec 两个命令之间,但是不支持回滚,也无法实现命令之间的逻辑关系计算。
4.2 Lua用法简述
脚本语言,数据类型:booleans, numbers,strings, tables.
4.3 Redis与Lua
- 在Redis中使用Lua
- eval :
eval 脚本内容 key个数 key列表 参数列表
-
evalsha:使用lua脚本的SHA1校验和直接执行对应Lua脚本
使用evalsha执行lua脚本过程.jpg
- Lua的RedisAPI
Lua可以使用redis.call实现对Redis的访问
4.4 案例
- Lua脚本在Redis中是原子执行的
- Lua脚本可以定制命令,并常驻在Redis内存中
- Lua脚本可以将多次命令一次性打包,减少网络开销
4.5 Redis管理Lua脚本
- script load script : 加载到redis中
- script exists sha1:判断sha1是否已加载到Redis中
- script flush:清除所有已加载的脚本
- script kill:杀掉正在执行的Lua脚本
5. Bitmaps
5.1 数据结构模型
bitmaps本身不是一种数据结构,实际就是字符串,但是可以对字符串的位操作
5.2 命令
设置值
setbit key offset value
获取值
getbit key offset
获取bitmaps指定范围值为1的个数
bitcount [start] [end]
bitmaps间的运算,bitop是一个符合操作,可以做多个bitmaps的and, or, not, xor操作并将结果保存在destkey中
bitop op destkey key [key ...]
计算bitmaps中第一个值为targetBit的偏移量
bitpos key targetBit [start] [end]
5.3 Bitmaps分析
并不是万金油,如果独立访问用户少,bitmaps大部分位都是0,那么就不适用了。
6. HyperLogLog
一种基数算法,通过HyperLogLog利用极小的内存空间完成独立总数的统计,比起集合(28G),只需要5M,但是存在0.81%的失误率。
- 只为了计算独立总数,不需要获取单条数据
- 可以容忍一定的误差率
7. 发布订阅
![](https://img.haomeiwen.com/i8195112/0fd09f946e80ff93.jpg)
使用场景
有效解决业务的耦合性,比如视频信息的变更
![](https://img.haomeiwen.com/i8195112/cf614fa2b0f9cf8c.jpg)
8. GEO(地理信息定位)
Redis 3.2 版本提供了GEO地理信息定位功能,地理位置信息包括经度、维度、成员
网友评论