缓存击穿

1. 缓存击穿简述

  某一个热点数据在缓存中失效,请求穿过redis到达DB,造成DB压力过大

2. 怎么解决缓存击穿

 1. 使用redis 作为分布式互斥锁(mutex lock

  实现步骤:

  1. 多线程请求redis (请求为空,若不做处理会发生缓存击穿)
  2. 请求分布式锁 (使用方式可以参考https://www.cnblogs.com/zhixinSHOU/p/14562405.html)
  3. 抢到锁的查询数据库,刷新redis,没抢到锁的线程sleep
  4. sleep时间结束返回 1

  注:使用分布式锁的时候必须设置过期时间,否则会有死锁的风险

 2. 提前更新缓存

  前提是缓存数据未失效,可以在获取的时候判断过期时间是否快要失效了,如果是则返回缓存数据的同时重新更新该值的过期时间,如果该数据已经过期了,那么还是需要采用第一种解决方式

缓存雪崩

1. 缓存雪崩简述

  和缓存击穿类似,但是区别是在于缓存击穿是某一个热点数据失效,而缓存雪崩是针对某一批的热点数据同时失效

2. 怎么解决缓存雪崩

 1. 使用redis 作为分布式互斥锁(mutex lock

  和缓存击穿的解决方式类似

 2.  过期时间设置随机值

  可以在原有的失效时间基础上增加一个随机值,让缓存的失效时间错开,就可以有效的避免缓存雪崩。

最新文章

  1. mybatis一对多关联
  2. VS.Net 2015 Update3 学习(2) jquery-form, jquery-validation,jquery-validation-unobtrusive一起用
  3. ajava包的命名
  4. db2中报SQLCODE=-530, SQLSTATE=23503错误
  5. Oracle 12c SYSAUX表空间不足处理-清理audsys.cli_swp$a9b5f52c$1$1表
  6. Hadoop学习(1)-- 入门介绍
  7. joinfetch之意义
  8. Linux进程间通信-匿名管道
  9. J2EE开发常用开源框架技术(转)
  10. Python基础入门教程
  11. Printk与sched_clock_init的一点分析
  12. Cygwin Unable to get setup from *
  13. 【Selenium】Selenium IDE(alt+ctrl+s)
  14. Requests抓取有道翻译结果
  15. 【本地资源路径&&网络资源路径&&正反斜杠在Java中的用法】
  16. npm run dev/build/serve
  17. CentOS_6.5配置iptables防火墙策略
  18. 前端基础-- CSS
  19. 对中文进行MD5加密的注意事项(Java版,编码问题)
  20. RPC好,还是RESTful好?

热门文章

  1. 解决CentOS虚拟机无法显示本地IP问题
  2. Ambassador-04- Mapping 资源
  3. Team Queue UVA - 540
  4. 阿里云 RTC QoS 弱网对抗之 LTR 及其硬件解码支持
  5. 【译】Android NDK API 规范
  6. 浅谈程序设计和C语言
  7. hdu3329 二分+搜索
  8. Maven关于web.xml中Servlet和Servlet映射的问题
  9. ThinkPHP5中出现unserialize()报错
  10. sharding JDBC 不支持批量导入解决方法