redis集群与哨兵模式以及缓存穿透与雪崩

主从复制

数据的复制是单向的,只能从主节点到从节点

主从复制,读写分离!master以写为主,slave以读为主80%都是进行读操作,减缓服务器压力

单台redis最大使用内存不应该超过20G

环境配置(单机下)

info replication 查看当前库信息

修改port

pidfile

logfile 6381.log

dump6381.rdb

redis-server kconfig/redis.conf

默认情况下每台都是主节点,需要配置,只配置从节点

slaveof ip port 配置主节点信息

真实的主从配置应该在配置文件中配置,这样的话是 永久的,这里使用的是命令,暂时的

复制原理

全量复制:slave服务在接收到数据库文件数据后,将其存盘并加载到内存中

增量复制:Master继续将新的收集到的修改命令依次传给slave,完成同步

只要从机重新连接到master,全量复制将被自动执行!高可用

宕机后手动配置主机

slaveof no one 如果主机断开连接,设置当前从机为主机

哨兵模式

除了监控各个redis服务器外,哨兵之间也会相互监视

1.配置哨兵配置文件 sentinel.conf

哨兵配置

port 默认26379

dir /tmp 工作目录

sentinel monitor 被监控的名称 host port 1

数字1,如果有1台哨兵发现主机挂了,slave投票

配置连接主机的密码
sentinel auth-pass

配置主观下线时间
sentinel down-after-milliseconds mymaster 30000 单位毫秒

启动哨兵
redis-sentinel kconfig/sentinel.conf

redis缓存穿透(查不到)

查询redis没有数据,查询MySQL也没有数据,查询之后不会被缓存到redis,利用这个查询,制造大量请求,造成问题
比如数据库id从1开始,那查询时key就选择负数,如-999、-1

解决方案

1.设置一个value为空,存到redis。 没啥用
2.布隆过滤器

缓存击穿(查太多)

key设置过期后

当在某个key过期的瞬间,有大量的请求并发访问,这类数据一般是热点数据,由于缓存过期,会同时访问数据库来查询最新数据,并且会写缓存,会导致数据库瞬间压力过大。
著名案例:微博

解决方案

1.设置热点数据永不过期

2.加互斥锁

分布式锁:使用分布式锁,保证对于每个key同时只有一个 线程去查询后端服务,其他线程没有获得分布式锁的权限,因此只需要等待即可。这种方式将高并发的压力转移到了分布式锁,因此对分布式锁的考验很大。

缓存雪崩

在某一个时间段缓存集中过期失效。或者redis宕机

大量请求去查询数据库,对数据库造成巨大压力,数据库挂掉

解决方案

redis高可用(搞集群)

异地多活

限流降级

加锁或者队列来控制数据库写缓存的线程数量,比如对某个key只允许一个线程查询数据和写缓存,其他线程等待

数据预热

先跑一遍,把数据加载到缓存中,设置不同的过期时间,让缓存失效的时间点尽量均匀

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值