Redis课堂笔记
课堂目标
- 能够理解Redis的主从复制jiegou
- 能够理解Redis的Sentinel架构
- 能够理解Redis集群架构
1. Redis的主从复制架构 44
- Redis可以配置主从复制结构,主节点就是Master节点,从节点就是Slave,Slave节点会不断的从Master节点同步数据
- 一个Master节点可以对应多个Slave节点
- Slave节点会向Master节点发送SYNC的请求,Master接受到SYNC请求后,做两件事:(初始化)
- 第一,以RDB的形式保存快照
- 第二,因为保存快照是比较耗时的,所以会将保存的快照期间的命令缓存下来.
- 当RDB保存完整后,就开始发送给Slave节点开始同步数据
- 一旦初始化完成,后续Master节点每接受一个命令,就会同步到Salve节点
- 主从复制结构的应用场景
- 备份容错(如果只有一个节点,会存在单点故障的问题)
- 读写分离(适用于读多写少的场景),如果写操作很多就得使用集群
- 从数据库持久化(将持久化的性能消耗转移到从节点)
1.1 另外两台服务器安装Redis 45
注意事项:
- 如果发现虚拟机无法联网,需要检查虚拟机的NAT网络配置,NAT的网络其实类似于家里的路由器,相当于Linux服务器要和Windows宿主机进行连接,就是通过这个路由器来连接的。所以网关地址都需要配置成NAT的网络
- 如果发现yum安装软件的时候下载速度比较慢,可以在网上搜索配置一个阿里云YUM源
- make test是表示执行测试用例,消耗的时间会比较长,大家晚上安装的时候可以跳过。因为这个Redis包已经在CentOS7.7做过测试了,没有兼容性问题
安装主从复制主要有一条配置:
slaveof master_ip master_port
1.2 启动Redis服务区
要检查主从复制已经配置好了:
就是当启动node2.itcast.cn、node3.itcast.cn时,如果数据都已经同步过来了,就表示OK了。但往node1.itcast.cn写入数据,数据会马上同步到另外两个节点。
2. Redis中的Sentinel架构
2.1 Sentinel介绍(哨兵)
- 哨兵主要用来保障Redis主从复制架构是高可用的,是能够自动进行节点切换的
- 他可以监控主从复制中的节点,当主节点崩溃的时候,进行选举
- 2:1即认为主节点已死亡
- 哨兵是单独的进程,加上3个redis,集群共六个进程.
- 一般哨兵的配置节点不能是一个,最好是有几个主从节点,就配置几个哨兵
- 当我们去查看操作哨兵的时候,需要指定客户端的连接端口号为26379
3Redis集群
4Redis高频面试题
4.1 缓存穿透
- 缓存穿透指的是一些黑客发送一些数据库和缓存都不存在的key,这些的话就是穿透了缓存,也穿透了数据库,高并发的情况下,就会压垮数据库,导致系统崩溃.
- 解决方案
- 给非法的key也设置一些缓存,这样下一次发出请求的时候,就回直接查缓存(就怕他变着法的发)
- 布隆过滤器(BloomFileter):布隆过滤器可以快速过滤的滤掉缓存中不存在的key或者不合法的,但是有一个问题:布隆过滤器不能准确地判断这个key是否存在
4.2 缓存击穿
- 只透redis,目的是为了骚扰Mysql
- 一言以蔽之:查询key,缓存过期,大量并发,频繁查询数据源(Mysql)
- 使用互斥锁去解决
- 通过sexnx(“互斥锁”,1)
- sexnx表示如果Key不存在的时候,才会设置一个key,如果存在就直接返回
- 这种方式可以确保只用一个线程能进入到加载数据库的逻辑中
4.3 缓存雪崩
- 缓存服务器中大量的key失效或者在服务器重启的时候,会出现大量并发去直接访问数据库,导致数据库的压力过大,系统崩溃
解决办法 - 不能让所有的key集中在某一个点失效,可以将过期的时间设置为随机
- 不让后台系统直接操作数据库.通过消息队列来隔离商业业务和数据
4.4 缩写
常见的英文缩写
message -> msg
- 去重元音(a.e.i.o)
2.去除重复的字母
- 减少key的长度,提升Redis的效率
- 命名以: 业务:mokuai:id…