缓存穿透

缓存穿透是指用户查询数据,在数据库没有,自然在缓存中也不会有。这样就导致用户查询的时候,在缓存中找不到,每次都要去数据库再查询一遍,然后返回空(相当于进行了两次无用的查询)。这样请求就会绕过缓存直接查数据库,这也是经常提的缓存命中率问题。

解决办法:
1.我们任然把这个空结果进行缓存,但它的过期时间会很短,最长不超过五分钟。通过这个直接设置的默认值放到缓存,这样第二次到缓存中获取就有值了
2.布隆过滤器

缓存击穿

缓存击穿是指缓存中没有但数据库中有的数据(一般是缓存时间到期),这时由于并发用户特别多,同时读缓存没读到数据,又同时去数据库去取数据,引起数据库压力瞬间增大,造成过大压力

解决方案:
1.设置热点数据永远不过时。
2.加互斥锁。

缓存雪崩

我们可以简单理解为: 由于原有缓存失效,新缓存未到期间(例如:我们设置缓存时采用了相同的过期时间,在同一时刻出现大面积的缓存过期),所有原本就应该访问缓存的请求都去查询数据库了,而对数据库CPU和内存造成了巨大压力,严重会造成数据库磊机。从而形成一些列连锁反应,造成整个系统奔溃。

解决办法:
1.大多数系统设计者考虑用锁(最多的解决方案)或者队列的方式保证不会有大量的线程对数据库一次性进行读写,从而避免失效时大量的并发请求落到底层存储系统上。
2.缓存数据的过期时间随机,防止同一时间大量数据过期现象发生。

最新文章

  1. Linux下的压缩和解压缩命令——jar
  2. JavaScript中的匿名函数及函数的闭包
  3. js圣诞节倒计时网页
  4. hive 基本语法
  5. 删除注释云平台JS,加快DISCUZ访问
  6. Golang 安装及配置教程 for Mac
  7. 24 个你应该了解的 PHP 库
  8. 2016 Multi-University Training Contest 5 ATM Mechine
  9. 51nod1394 差和问题
  10. Hive1.3 JDBC连接-代码片段
  11. Android学习准备
  12. 【问题】tableView的每组的头部不不能滚动的解决方案
  13. Ubuntu中编译链接Opencv应用的简便方式
  14. python爬虫入门-开发环境与小例子
  15. 【ZJOI2008】树的统计(树链剖分)
  16. Day 2 下午
  17. 将mnist获得的数据还原成图片形式
  18. UVA - 12169 -扩展欧几里得算法
  19. Java技术----Java泛型详解
  20. django-mvvm(django的FormObject)

热门文章

  1. USB数据线 单独供电
  2. Emoji.voto,Linkerd 服务网格(service mesh)的示例应用程序
  3. urllib的使用和进阶——urllib.request
  4. 微信小程序云开发-云存储的应用-识别银行卡
  5. informix常见问题
  6. String类型转成int类型
  7. Maven作用及应用
  8. 用activiti实现类似钉钉审批流程-附整个系统源码
  9. ubuntu16登录后黑屏无法进入系统问题汇总
  10. 填坑-关于IIC通讯