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分析。

 

posted @ 2020-09-24 10:11  没有如果Z  阅读(162)  评论(0编辑  收藏  举报