redis的缓存雪崩、缓存穿透和缓存击穿
2024-09-01 22:01:40
缓存雪崩:
比如给缓存中的key设置了统一的过期时间,而在过期时间点,有大量的请求进来,这个时候redis中没有用户请求的资源,所以所有的请求会全部拥到数据库,如果数据库有报警监测的话,可能会报一下警,然后数据库就挂掉了。如果这时候把数据重新起来,redis上还是没有缓存这些内容,数据库还是会被再一次击垮。
解决方法:
给key的过期时间设置一个随机值,让key的过期时间不集中到一块。这样即使有过期的,这样的压力,一般的redis集群都能扛下来。
缓存击穿:
某个key比较热点,当有大量的用户访问时,如果这个key在这期间失效的话,会造成缓存击穿。
解决方法:
可以设置热点数据和首页数据不过期,如果主页数据有更新的话,可以从数据库刷新缓存
缓存穿透:
缓存穿透就是用户访问的数据在缓存中和数据库中都不存在。数据库的id都是从1自增加的,如果用户用户访问一个id为-1的数据或者id特别大的数据,缓存中和数据库中找不到这个数据,就会造成缓存穿透
解决办法:
在接口层进行数据校验,如果id<=0或者参数不合法,直接拦截。或者如果这个数据找不到的话,可以给这个key的value设置为null或者可以根据需要返回一个“小可爱,您迷路了”。
注:
① redis可以做高可用、集群、哨兵加主从,可以避免全盘崩溃
② redis可以做持久化RDB+AOF,一旦重启,可以自动从磁盘上加载数据,快速恢复缓存数据(恢复数据时只需把备份文件放到redis的安装目录即可)
③ 服务降级,进行数据限流(通过限流组件:这样用户可能单次访问不到页面,但是多刷几次就出来了) ,这样可以避免数据库被直接打死
最新文章
- Ubuntu下配置python完成爬虫任务(笔记一)
- console对象-转
- 转iOS中delegate、protocol的关系
- MyBatis学习总结_13_Mybatis查询之resultMap和resultType区别
- HttpServlet请求重定向
- (原)ubuntu上安装Torch7及nn及dpnn
- 【HeadFirst 设计模式总结】2 观察者模式
- Batch Sort
- 对本地Solr服务器添加IK中文分词器实现全文检索功能
- sublime实现markdown浏览器预览
- 链表实现python list数据类型
- mongoVUE的增删改查操作使用说明(转)
- 谈谈Android NDK中动态链接库(.so文件)的优化
- xilinx DMA IP核(一) —— loop测试 代码注释
- EXCHANGE 2013 TLS传输层安全
- 错误:在maven install是抛出 “1.5不支持diamond运算符,请使用source 7或更高版本以启用diamond运算符”
- SpringMVC 源码阅读
- DFS(8)——poj2034Anti-prime Sequences
- 在.net2.0中实现Action和Func方法
- java多线程之happens-before
热门文章
- python-基础r/R、b、u/U含义
- ruby读写文件的方法
- C# List 根据对象属性去重的四种方法对比
- 中国古风唯美水墨工作计划汇报PPT模板推荐
- Axure制作dialog效果的动作步骤
- 梁敬彬老师的《收获,不止SQL优化》,关于如何缩短SQL调优时间,给出了三个步骤,
- MySQL数据库~~~~~创建用户和授权、备份和还原
- Ribbon负载均衡及Feign消费者调用服务
- 2019-2020-1 20199305《Linux内核原理与分析》第十一周作业
- 【洛谷5643】[PKUWC2018] 随机游走(Min-Max容斥+待定系数法+高维前缀和)