zoukankan      html  css  js  c++  java
  • Redis-雪崩

    Redis 雪崩:
      雪崩就是指缓存中大批量热点数据过期后系统涌入大量查询请求,因为大部分数据在Redis层已经失效,请求渗透到数据库层,大批量请求犹如洪水一般涌入,引起数据库压力造成查询堵塞甚至宕机。
    解决办法:
    将缓存失效时间分散开,比如每个key的过期时间是随机,防止同一时间大量数据过期现象发生,这样不会出现同一时间全部请求都落在数据库层,如果缓存数据库是分布式部署,将热点数据均匀分布在不同Redis和数据库中,有效分担压力,别一个人扛。
    简单粗暴,让Redis数据永不过期(如果业务准许,比如不用更新的名单类)。当然,如果业务数据准许的情况下可以,比如中奖名单用户,每期用户开奖后,名单不可能会变了,无需更新。
     事前:redis 高可用,主从+哨兵,redis cluster,避免全盘崩溃。
    事中:本地 ehcache 缓存 + hystrix 限流&降级,避免 MySQL 被打死。
    事后:redis 持久化,一旦重启,自动从磁盘上加载数据,快速恢复缓存数据。
    方案:
    1、在缓存失效后,通过加锁或者队列来控制读数据库写缓存的线程数量。比如对某个key只允许一个线程查询数据和写缓存,其他线程等待。(跟击穿的第一个方案类似,但是这样是避免不了其它key去查数据库,只能减少查询的次数)
    2、可以通过缓存reload机制,预先去更新缓存,再即将发生大并发访问前手动触发加载缓存。
    3、不同的key,设置不同的过期时间,具体值可以根据业务决定,让缓存失效的时间点尽量均匀
    4、做二级缓存,或者双缓存策略。A1为原始缓存,A2为拷贝缓存,A1失效时,可以访问A2,A1缓存失效时间设置为短期,A2设置为长期。(这种方式复杂点)

  • 相关阅读:
    4.羽翼sqlmap学习笔记之Post登录框注入
    3.羽翼sqlmap学习笔记之Cookie注入
    2.羽翼sqlmap学习笔记之MySQL注入
    1.羽翼sqlmap学习笔记之Access注入
    转:C语言中的头文件可以自己写吗?
    12.Struts2自定义拦截器
    linux 软件安装篇
    微信开发-PC调试-JS-SDK功能之分享功能调试
    JS加载相对路径脚本的方法
    apache环境之困扰,Rewrite导致无法加载多个不同的.html文件
  • 原文地址:https://www.cnblogs.com/danyuzhu11/p/15328731.html
Copyright © 2011-2022 走看看