缓存雪崩:

比如给缓存中的key设置了统一的过期时间,而在过期时间点,有大量的请求进来,这个时候redis中没有用户请求的资源,所以所有的请求会全部拥到数据库,如果数据库有报警监测的话,可能会报一下警,然后数据库就挂掉了。如果这时候把数据重新起来,redis上还是没有缓存这些内容,数据库还是会被再一次击垮。

解决方法:

给key的过期时间设置一个随机值,让key的过期时间不集中到一块。这样即使有过期的,这样的压力,一般的redis集群都能扛下来。

缓存击穿:

某个key比较热点,当有大量的用户访问时,如果这个key在这期间失效的话,会造成缓存击穿。

解决方法:

可以设置热点数据和首页数据不过期,如果主页数据有更新的话,可以从数据库刷新缓存

缓存穿透:

缓存穿透就是用户访问的数据在缓存中和数据库中都不存在。数据库的id都是从1自增加的,如果用户用户访问一个id为-1的数据或者id特别大的数据,缓存中和数据库中找不到这个数据,就会造成缓存穿透

解决办法:

在接口层进行数据校验,如果id<=0或者参数不合法,直接拦截。或者如果这个数据找不到的话,可以给这个key的value设置为null或者可以根据需要返回一个“小可爱,您迷路了”。

注:

① redis可以做高可用、集群、哨兵加主从,可以避免全盘崩溃
② redis可以做持久化RDB+AOF,一旦重启,可以自动从磁盘上加载数据,快速恢复缓存数据(恢复数据时只需把备份文件放到redis的安装目录即可)
③ 服务降级,进行数据限流(通过限流组件:这样用户可能单次访问不到页面,但是多刷几次就出来了) ,这样可以避免数据库被直接打死

最新文章

  1. Ubuntu下配置python完成爬虫任务(笔记一)
  2. console对象-转
  3. 转iOS中delegate、protocol的关系
  4. MyBatis学习总结_13_Mybatis查询之resultMap和resultType区别
  5. HttpServlet请求重定向
  6. (原)ubuntu上安装Torch7及nn及dpnn
  7. 【HeadFirst 设计模式总结】2 观察者模式
  8. Batch Sort
  9. 对本地Solr服务器添加IK中文分词器实现全文检索功能
  10. sublime实现markdown浏览器预览
  11. 链表实现python list数据类型
  12. mongoVUE的增删改查操作使用说明(转)
  13. 谈谈Android NDK中动态链接库(.so文件)的优化
  14. xilinx DMA IP核(一) —— loop测试 代码注释
  15. EXCHANGE 2013 TLS传输层安全
  16. 错误:在maven install是抛出 “1.5不支持diamond运算符,请使用source 7或更高版本以启用diamond运算符”
  17. SpringMVC 源码阅读
  18. DFS(8)——poj2034Anti-prime Sequences
  19. 在.net2.0中实现Action和Func方法
  20. java多线程之happens-before

热门文章

  1. python-基础r/R、b、u/U含义
  2. ruby读写文件的方法
  3. C# List 根据对象属性去重的四种方法对比
  4. 中国古风唯美水墨工作计划汇报PPT模板推荐
  5. Axure制作dialog效果的动作步骤
  6. 梁敬彬老师的《收获,不止SQL优化》,关于如何缩短SQL调优时间,给出了三个步骤,
  7. MySQL数据库~~~~~创建用户和授权、备份和还原
  8. Ribbon负载均衡及Feign消费者调用服务
  9. 2019-2020-1 20199305《Linux内核原理与分析》第十一周作业
  10. 【洛谷5643】[PKUWC2018] 随机游走(Min-Max容斥+待定系数法+高维前缀和)