Redis之扩展
Redis 命令生命周期
发送命令--->排队等待--->执行命令--->返回结果。
慢查询
慢查询发生在第三阶段:执行命令阶段。但是客户端超时不一定是慢查询,但慢查询影响连接超时。
slowlog-max-len:先进先出,固定长度,保存在内存中,默认10ms。
slowlog-log-slower-than:慢查询阈值(微秒),slowlog-log-slower-than=0 记录所有命令,slowlog-log-slower-than<0 不记录所有命令
slowlog get[n] :查询慢查询队列,n:查询的条数。
slowlog len :查询慢查询队列的长度。
slowlog reset :清空慢查询队列。
pipeline
流水线,一次网络——n次命令。命令是微秒级别的,其解决网络的时间问题。m操作原子的,pipeline非原子的,将命令拆分,但返回顺序的。每次只能执行在一个节点上。
发布订阅
发布者(publisher):publish channel message
订阅者(subscriber):subscriber[channel ] 可订阅多个频道。
频道(channel)。
Bigmap
setbit
getbit key offset
bitcount key [start end]
bitop op destkey key [key.........]
HyperLogLog
基于HyperLogLog算法,极小空间完成独立数据统计。其本质还是字符串,API: 添加元素:pfadd key item[item.....] 计算独立总数:pfcount key[key.......], 合并多个 HyperLogLog :pfmerge destkey sourcekey[sourcekey......]
独立用户统计,错误率为0.81%,需要单条数据,极少的内存。
geo地理信息位置
3.2版本以后更新,使用zset实现
添加:geoadd key longitude latitude member[longitude latitude member..........]
获取:geopos key member[member......]
计算距离:geodist key member1 member2[单位:m,km,mi(英尺),ft(尺)]
georadius:计算指定范围内的地理信息位置信息集合,
RDB:快照持久化保存数据,耗时 耗性能 不可控容易丢数据
触发机制:save同步阻塞保存 ,存在老的RDB文件,则新文件替换老的文件 。
bgsave:异步保存 使用Linux的 fork()函数(会发生阻塞),子进程完成通知主进程,backgroud saving start开始保存,bgsabe successfully 成功。
自动:配置 save 900 1 save 300 10 save 60 1 0000
AOF:日志备份持久化
策略:always:缓冲区每个命令都写入AOF文件
everysec:缓冲区每秒写入AOF文件
no:由操作系统决定
AOF重写:减少磁盘占用,加速恢复速度。其实质还是启动子进程将内存数据进行一次重写。方式:bgrewiteaof命令和AOF重写命令,
优化:
1、fork():内存页拷贝而不是整个内存,与内存大小和机型有关。控制redis实例最大使用内存:maxmemory,合理配置Linux内存分配策略:vm.overcommit_memory=1,降低fork()频率
2、子进程开销和优化:CUP:RDB和AOF文件生成属于CPU密集型,不做CUP绑定,不部署CPU密集型机器,内存:fork()内存开销,copy-on-write,优化方式:echo never >/sys/kernel/mm/transparent_hugepage/enabled。
3、硬盘:结合iostat,iotop分析。