- 持久化
- RDB
- AOF
- 主从同步
- 全量同步
- 增量同步
- 哨兵sentinel
- 作用
- 服务状态监控
- 选举master
- 分片集群
- 作用
- 散列插槽 hash slot
- 集群伸缩
- 故障转移
- 多级缓存
持久化
RDB
redis备份文件(快照)
- 可压缩,耗费cpu
- 默认在服务停止时触发
- 可以设置一定条件,条件触发,开启子进程备份
fork主进程得到子进程,二者共享内存数据(子进程复制主进程的页表虚拟内存),然后备份,用新的RDB文件替换旧的
子进程和主进程二者共享的页表,映射到同一位置的物理内存,此时子进程读数据,如果主进程修改数据会冲突。
cpoy on write 技术:子进程备份时,将物理内存设置为只读,主进程写数据需要拷贝一份,在副本中修改,页表的映射关系也改为副本。极端情况下,需要复制全部的数据,则内存使用翻倍 - 耗时长,两次RDB之间,如果宕机,数据有丢失风险
AOF
将redis全部命令存储。
- 默认关闭
- 先写到缓冲区中,再定时/立刻/操作系统决定从缓冲区写到文件中。
- 整理命令,将之前的无效命令处理掉。根据文件大小触发,减少AOF文件大小
主从同步
- 读写分离,读到从,写到主,高并发读
- 可以开启无磁盘复制,(网络快的情况下)
- redis单节点内存较小,RDB也会减小,减少磁盘/网络IO
- 减少全量同步
- 从节点过多时,可以主-从-从
全量同步
- 第一次全量同步,生成RDB文件,发给从节点。之后将repl_baklog命令发给从节点
- 从节点继承主节点的replid,offset记录从节点同步位置
增量同步
- repl_baklog文件大小一定,是一个环形缓冲区,如果从节点长期宕机未重启,致使repl_baklog覆盖掉原来的offset则无法增量更新。从节点要尽快恢复
哨兵sentinel
作用
- 监控:监控redis主节点和从节点,是否正常工作
- 自动故障恢复:sentinel本身也是一个集群,保证自身可用,出故障自己恢复
- 通知:sentinel类似注册中心,redis发生改变时,将最新信息发给redis客户端
服务状态监控
心跳检测
主观下线:一段时间未响应
客观下线:一半以上(可变)的sentinel认为实例故障
选举master
- 确认从节点正常存活:心跳检测未响应则排除
- slave-priority比较,越小优先级越高,0不参与选举
- offset越大则节点数据越新越完整
- 节点id越小,优先级越高
- 广播新的主节点信息,强制修改旧主节点信息,将其改为从节点
分片集群
多个master
作用
- 海量数据存储
- 高并发写
散列插槽 hash slot
将多个插槽(16384)分给多个master
key的有效部分({}中包含的部分)hash 计算插槽
集群伸缩
添加/删除节点,插槽重分配
故障转移
多级缓存
各个环境添加缓存
浏览器:静态资源
tomcat的性能不如redis,如果放在redis之前,限制了系统并发量
redis未命中的情况下,请求不会直接达到数据库,保护数据库
tomcat内部实现进程缓存(jvm进程缓存)