课程名称:Java架构师-技术专家
课程章节:第7周 集群架构:主从复制高可用Redis集群
主讲老师:慕课讲师团:Geely、风间影月、阿神……
课程内容:
1、Redis 主从复制原理
单机 Redis 的并发量存在瓶颈,想要突破瓶颈就需要对单个 Redis 进行扩展。
进行扩展的时候,主从分离的模式是最简单的一种扩展模式,是一种水平(横向)的扩展,通过增加服务器提升性能。
主从架构(主从读写分离)的全称是主从复制,也称为读写分离架构。
Redis 是缓存,根据读写二八原则,主节点负责处理写操作,分发读请求到从节点,从节点负责处理读操作。
1.1、主从原理
slave 节点启动成功后,会向 master 节点发送 ping,表示需要进行数据同步,master 节点将此时的内存数据 持久化 到磁盘中作为 .rdb 文件,通过网络传输将文件发送给 slave 节点,slave 节点接受到后,会加载到内存中,完成数据的同步(全量同步)。第一次数据复制也称为初始化。
后续 master 接受到写请求后,会直接向 salve 发送同样的写请求,不经过磁盘(增量同步)
在数据同步的过程中,不会阻塞 master 的写操作,以及 slave 的写操作。此时读取到的数据为同步完成之前的旧数据。同步完成后新数据会替换到旧数据。
主从架构 master 节点必须开启持久化,否则 master 重启之后,内存数据丢失,数据同步时会导致从节点所有的数据丢失。
1.2、主从模式
一主二从最常见,从节点过多,主从节点之间的数据同步,会占用较多的网络 带宽。
2、Redis 缓存过期处理与内存淘汰机制
计算机内存有限,越大越贵,但Redis 的高并发、高性能都是基于内存的。
2.1、 已过期的key如何处理?
设置了 expire 的key 缓存过期了,但是服务器的内存还是会被占用,这是因为 redis 所基于的两种删除策略。
Redis 有两种策略:
- (主动)定时删除:定期随机检查过期的key,如果过期则清理删除。(每秒检查次数在
redis.conf
中hz
配置) - (被动)惰性删除:当客户端请求一个已经过期的key的时候,那么 redis会检查这个key是否过期,如果过期了,则删除,然后返回一个nil。这种策略对CPU比较友好,不会有太多的损耗,但是内存占用会比较高。
所以,虽然 key 过期了,但是只要没有被 redis 清理,那么其实内存还是会被占用着的。
2.2、 如果内存被Redis 缓存占用慢了咋办?
内存占满了,可以使用磁盘来保存,但是没意义,因为磁盘没有硬盘快,会影响 redis 性能。
所以,当内存占用满了以后,redis 提供了一套缓存淘汰机制:MEMORY MANAGEMENT
maxmemory
:当内存已使用率到达,则开始清理缓存。
* noeviction:旧缓存永不过期,新缓存设置不了,返回错误
* allkeys-lru:清除最少用的旧缓存,然后保存新的缓存(推荐使用)
* allkeys-random:在所有的缓存中随机删除(不推荐)
* volatile-lru:在那些设置了expire过期时间的缓存中,清除最少用的旧缓存,然后保存新的缓存
* volatile-random:在那些设置了expire过期时间的缓存中,随机删除缓存
* volatile-ttl:在那些设置了expire过期时间的缓存中,删除即将过期的
学习收获
今天学习一个半小时,主要学习了两块内容:
- Redis 的主从复制架构产生的原因和原理。(单机瓶颈,水平扩展,读写分离)
- Redis 的缓存过期机制。(内存有限,及时删除)
今天的学习完毕,