Redis分布式缓存
Redis常被用来作为缓存,分布式缓存即为集群模式的redis。
一、持久化
1.1 RDB
Redis停机(主动停机)一次就会执行一次RDB。
可以看到redis的执行日志生成了rdb文件:
rdb文件保存在当前运行目录:
再次启动redis数据会自动恢复:
注意:
上述的rdb机制是主动停机时执行的,若是宕机不会执行。为例定时实现rdb存储,可以修改redis的配置文件。
上图的设置是若900或(或300秒或60秒)内由1个(或10个或10000个)key被修改,则执行rdb存储。
补充:RDB的fork原理
RDB的持久化是存在风险的,因为两次持久化之间的时间间隔较长。
1.2 AOF持久化
二、redis主从
2.1 搭建主从架构
设置从节点的主节点:
注意:主节点执行写操作,从节点执行读操作,实现读写分离。
查询主机状态(下图为主节点状态,连接了两个从节点)
2.2 数据同步原理
master判断slave是否是第一次来同步数据的方法:
注意:repl_backlog是一个固定长度的数组,且存满了就从初始位置开始存储,即可看成环形存储。
2.3 哨兵
2.3.1 哨兵的作用和原理
哨兵本身也是一个集群。
从slave节点中选出一个作为新的master节点的原则:
2.3.2 搭建哨兵集群
2.3.3 RedisTemplate连接哨兵
2.4 Redis分片集群
Redis主从集群可以应对高并发的问题。但是Redis主从之间也会做同步,为了提高主从同步时的性能,单节点的redis它的内存设置不要太高,如果内存设置过高则在rdb持久化或是全量同步时会导致大量的IO,性能会下降。
若单节点redis的内存上限降低了,比如只能存10G,20G,则不能适用于存储海量数据;此外,主从集群不适用于写并发很高的场景。这些问题用Redis分片集群来解决。
2.4.1 分片集群结构
2.4.2 散列插槽
插槽是在搭建主从集群时配置的。
2.4.3 集群伸缩
集群伸缩即动态地增加或删除节点。
2.4.4 故障转移