Redis小记

redis的缓存方式
RDB:通过压缩的二进制文件方式存储,保存某个时间点的全量数据,时间点后的操作不会保存
优点:占用小,恢复速度快,对性能的影响小
缺点:无法实时持久化,老版本不兼容新版本RDB文件
AOF:记录所有变更数据库的命令,通过append的形式保存至AOF文件中
优点:兼容性好
缺点:支持秒级持久化,恢复慢,对性能影响大

缓存穿透
当查询一个不存在的数据时,数据将不会保存到缓存,会导致请求过来时,DB会去查一次该数据,可能导致db宕机
解决:1.未查询到数据时把它作为空值存储至缓存。2.用bitmap存储数据,可避免不存在的情况。

缓存击穿
设置过期时间的数据在过期时被大量请求访问,这时数据库不得不重新去db捞数据,导致db负载过大
解决:1当缓存失效时,不立即去 load db,先使用如 Redis 的 setnx 去设置一个互斥锁,当操作成功返回时再进行 load db 的操作并回设缓存,否则重试 get 缓存的方法。2.永远不过期:物理不过期,但逻辑过期(后台异步线程去刷新)

缓存雪崩
数据全部设置了相同过期时间,导致缓存过期时所有请求直接访问db数据,导致负载
解决:分散设置过期时间

redis集群模式
主从复制:从数据库启动,发送异步指令给主数据库,主数据库开始备RDB文件数据,同时收集备份期间的缓存命令,带快照生成,将RDB和命令一起发送到从数据库,完成初始化复制,随后主接收的每一条命令都会发送到从数据库。

哨兵模式:
用于监听master数据库的状态,若master异常,会在slave中选择一个作为master,原master作为slave。Master-Slave切换后,master_redis.conf、slave_redis.conf和sentinel.conf的内容都会发生改变,即master_redis.conf中会多一行slaveof的配置,sentinel.conf的监控目标会随之调换。

https://www.cnblogs.com/kevingrace/p/9004460.html
Sentinel工作方式(每个Sentinel实例都执行的定时任务)
1)每个Sentinel以每秒钟一次的频率向它所知的Master,Slave以及其他 Sentinel 实例发送一个PING命令。
2)如果一个实例(instance)距离最后一次有效回复PING命令的时间超过 own-after-milliseconds 选项所指定的值,则这个实例会被Sentinel标记为主观下线。
3)如果一个Master被标记为主观下线,则正在监视这个Master的所有 Sentinel 要以每秒一次的频率确认Master的确进入了主观下线状态。
4)当有足够数量的Sentinel(大于等于配置文件指定的值)在指定的时间范围内确认Master的确进入了主观下线状态,则Master会被标记为客观下线。
5)在一般情况下,每个Sentinel 会以每10秒一次的频率向它已知的所有Master,Slave发送 INFO 命令。
6)当Master被Sentinel标记为客观下线时,Sentinel 向下线的 Master 的所有Slave发送 INFO命令的频率会从10秒一次改为每秒一次。
7)若没有足够数量的Sentinel同意Master已经下线,Master的客观下线状态就会被移除。 若 Master重新向Sentinel 的PING命令返回有效回复,Master的主观下线状态就会被移除。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值