redis备忘录
redis 总结
1.数据类型
string
hash
list 可做消息队列
set 无序 商品排行
zset 有序 热点数据
geohll 地理位置
发布订阅
redis事务
1.单线程,开始事务时,死循环时,其它操作不能执行
2.在执行命令操作时,发生了死循环,其他操作不能执行,只能重启redis才能执行。
lua脚本
批量执行命令
原子性
操作集合的复用
数据淘汰和内存回收
定时过期,设置key的过期时间,到期过期
惰性过期,key被访问的时候才会判断是否过期,过期则删除
定期过期,每隔一段时间清除一定数量的过期的可以、
2持久化机制
rdb:默认开启,可进行配置,多久一次生成rdb文件,shutdown/flushall时触发rdb。内存紧凑
不影响主进程,恢复大数据集速度快
同步频率
aof:日志形式记录命令,默认不开启,每秒执行一 次。最多丢失一秒钟的数据,数据实时性较好,但是数据同步大数据的时候比较慢。
当aof文件越来越大的时候该怎么做?
redis 提供了一种重写机制, redis会设置一个数值
(auto-aof-rewrite-percentage 100;auto-aof-rewrite-min-size 64mb),当超过这个数值的时候,触发重写机制,会把数据进行压缩。
pipeline 管道机制
解决大量插入数据时很慢的情况。
一次添加数据为什么会慢
因为,client 和sever 是基于tcp协议进行交互的,每次数据添加都要进行请求和响应,而且是单线程模式,下一次添加数据只能进行等待
3主从复制
配置文件 slaveof ip port
命令 config slaveof ip port
原理
连接:当配置了主从复制的时候,slave结点会保存masterip信息,会有一个定时器定时去请求master结点是否需要连接,并建立网络连接,同时会生成一个数据文件处理器,例如接受master结点数据等
数据同步:master在进行数据同步的时候 会执行bgsave命令生成一个rdb文件,并把rdb文件传输给slave结点,传输过程中,client写入的数据会缓存在master内存中,当rdb文件传输完成是,在把内存缓存的数据同步到slave。当然在传输的过程中会发生 网络异常,传输中断,网络恢复时,会通过offset偏移量继续传输,通过replication命令可查看偏移量。
命令传输: master 异步复制传播到slave结点
4 哨兵sentinel
具有 监控,通知,自动故障转移,配置管理(通过sentinel获取master结点的信息)功能。
提高redis的高可用,自动主从切换。
每个setinel都会监控master结点和多个slave结点,client会通过sentinel获取master结点信息,然后连接master结点.
sentinel 原理
主观下线
sentinel定时会向master结点和slave结点发送ping命令,在一段时间(通过down-afer-millionssecond:1xxxx 配置)不回复时,会把结点标记为主观下线。当然当发生网络异常sentinel无法监控子节点的时候也会被标记为主观下线,此时并不能确定结点是否真正发生故障。
客观下线
当某个redis结点被sentinel标记为主观下线的时候,当前哨兵结点会询问其它哨兵结点,当多数哨兵结点也确定为主观下线的时候,就会真正的标记当前redis结点为故障。
自动故障转移
当master发生客观下线的时候,需要进行自动故障转移。
1.选举哨兵leader (通过raft共识算法进行选举)
2.哨兵leader开始进行故障转移
3.通过命令进行主从切换
slaveof no none 其中一个slave结点断开与故障master结点的链接
slaveof ip port 重新指向新的master结点
影响slave结点成为master结点的因素
1.slave与master断开连接的时长
2.优先级设置,配置文件配置(replication-priority)
3.offset复制的偏移量
4.进程pid最小
客户端代理分片
略
服务端分片cluster
略