一、回顾
1、Redis分布式锁实现思路
Redis实现分布式锁基于SetNx
命令,因为在Redis中key是保证是唯一的。所以当多个线程同时的创建setNx时,只要谁能够创建成功谁就能够获取到锁。
Set 命令 每次set时,可以修改原来旧值;
SetNx命令 每次SetNx检查该 key是否已经存在,如果已经存在的话不会执行任何操作。返回为0 如果已经不存在的话直接新增该key。
1:新增key成功 0 失败
获取锁的时候:当多个线程同时创建SetNx k,只要谁能够创建成功谁就能够获取到锁。
释放锁:可以对该key设置一个有效期可以避免死锁的现象。
2、分布式锁的应用场景有那些
1.分布式任务调度平台保证任务的幂等性。
2.分布式全局id的生成
三、Redis集群主从之分
相关配置Redis.conf
#replicaof
slaveof 192.168.212.155 6379
masterauth 123456
info replication
四、Redis主从复制整个原理过程
1.Redis的主从复制作用:
单个Redis如果因为某种原因宕机的话,可能会导致整个Redis服务丕可用;。
可以使用Redis主从复制实现一主多从主节点负责写、从节点负责读数据。。
主节点会将数据采用增量或者全量形式同步给从节点保证数据的一致性问题。
2.主从复制:
- 实现Redis集群。
- .数据的备份.
- 读写分离。
3.主从复制需要注意问题:
主节点会将数据采用增量或者全量形式同步给从节点保证数据的一致性问题。
4.主从复制原理过程: .
1.需要在从redis服务器配置在slaveof 执行主redis _服务ip地址
和端口号
.
192.168. 1. 110: 6379 (主的服务) 和密 码
;
2.从Redis服务器和主Redis服务器建立Socket长连接
;
3.采用全量和增量形式将数据同步
给从Redis服务器
全量
:从Redis首次
启动的时候(二 进制执行dump文件) rdb.
增量:主Redis每次有新的set请求时候aof日志文件.
首次全量,接下来是增量同步
五、传统一主多从复制存在那些问题
1.树状形式
该主从同步方式存在 如果从节点非常多的话,会导致对主节点同步多个从节点压力非常大
可以采用树状
类型解决该问题
传统的一主多从同步效率比较建议采用树状形式
2.slaveof:上级服务器
六、在Redis中配置一主多从关系
关闭防火墙
启动redis
七、主从复制存在那些缺陷
八、哨兵集群架构设计原理
哨兵机制原理
1.哨兵机制每个10s时间只
需要配置监听
我们的主节点
就可以获取当前整个Redis集群的环境列表,采用info 命令形式。
2.哨兵不建议是单机的,最好每个Redis节点都需要配置哨兵监听。
3.哨兵集群原理是如何:多个哨兵都执行同一个主的master节点,订阅到相同都通道,有新的哨兵加入都会向通道中发送自己服务的信息,该通道的订阅者可以发现新哨兵的加入,随后相互建立长连接。
4.Master的故障发现 单个哨兵会向主的master节点发送ping的命令,如果master节点没有及时的响应,哨兵会认为该master节点为“主观不可用状态”会发送给其他都哨兵确认该Master节点是否不可用,当前确认的哨兵节点数>=quorum(可配置),会实现重新选举。
九、master如何确定宕机重新选举
十、配置Redis哨兵集群高可用01
cp /usr/redis-5.0.6/sentinel.conf /usr/redis/bin
cd /usr/redis/bin
vi sentinel.conf
sentinel monitor mymaster 192.168.212.160 6379 3
sentinel auth-pass mymaster 123456
160宕机,选举后,158成为主节点
160再次启动,成为158的从节点。
158现在有2个从节点 :148,160
哨兵只能解决选举问题,不能解决数据同步问题 :
需要手动在160配置:
十一、配置Redis哨兵集群高可用02、
Redis主从复制
基本概念:
单个Redis如果因为某种原因宕机的话,可能会导致Redis服务不可用,可以使用主从复制实现一主多从
,主节点负责写的操作,从节点负责读的操作,主节点会定期将数据同步到从节点中,保证数据一致性的问题。
该主从同步方式存在 如果从节点非常多的话,会导致对主节点同步多个从节点压力非常大
可以采用树状类型
解决该问题
全量
复制:一般用于在初次
的复制场景(从节点与主节点一次建立)
增量复制:网络出现问题,从节点再次连接主节点时,主节点补发缺少的数据,每次数据增量同步
十二、哨兵集群配置需要注意的事项1
需要2个哨兵同意,才可以重新选举
主节点:160
2个从节点:148,158
十三、哨兵集群配置需要注意的事项2
启动3个 的哨兵
160 shutdown 让160宕机
redis正在选举过程中,redis不可用,因为不知道主从。
158成为master节点:
哨兵记录了 当前主节点: 即使现在160的redis宕机了
redis是redis
哨兵是哨兵
哨兵删除了之前配置的160主节点,密码没有删
重新启动160节点:
主节点158写数据:
148查到:
再次启动的160,没有同步到数据:
160没158的密码
加上密码:
重启160redis
因为哨兵没有 重设密码。
一开始都不加密码
或者,宕机,重启后,在配置一下密码
十四、Redis缓存穿透
概念与解决方案
缓存穿透:
产生的背景:
缓存穿透是指使用不存在的key
进行大量的高并发查询,导致缓存无法命中,每次
请求都要都要穿透到后端数据库查询
,使得数据库的压力非常大
,甚至导致数据库服务压死;
解决方案:
1.接口层实现api限流
、用户授权、id检查等;(根本
)
2.从缓存和数据库都取不到数据
的话,一样将数据库
空值放入缓存中,设置
30s有效期避免使用
同一个id对数据库攻击`压力大;
3.布隆过滤器
十五、Redis缓存击穿
概念与解决方案
缓存击穿
产生背景:
在高并发的情况下,当一个缓存key过期时
,因为访问该key请求较大,多个
请求同时发现缓存过期,因此对多个请求同时数据库查询
、同时向Redis写入缓存数据
,这样会导致数据库的压力非常大
;
解决方案:
1.使用分布式锁
保证在分布式情况下,使用分布式锁保证对于每个key同时只允许
只有一个线程
查询到后端服务,其他没有获取到锁的权限
,只需要等待即可;这种高并发压力
直接转移到分布式锁
上,对分布式锁的压力非常大
。
2.使用本地锁
使用本地锁与分布式锁机制一样,只不过分布式锁适应于服务集群、本地锁仅限于单个服务
使用。
3.软过期
设置热点数据永不过期或者异步延长过期时间;
4.布隆过滤器
十六、Redis缓存雪崩
概念与解决方案
缓存雪崩
缓存雪崩指缓存服务器重启
或者大量的缓存
集中在某个时间段失效
,突然给数据库产生了巨大的压力,甚至击垮数据库的情况。
解决思路:对不用的数据使用不同的失效时间
,加上随机数