这三个问题的发生,会导致大量的请求直接积压到数据库,如果并发量很大,则可能会导致数据库宕机或故障。

缓存雪崩

  描述:大量的请求无法在redis缓存中进行处理而被发送到数据库,导致数据库压力陡增。

产生的原因:

1. redis缓存中大量的数据同时到期,导致大量请求无法在缓存中得到处理。

解决方案:

a.微调过期时间。避免给大量的数据设置相同的过期时间,如果业务一定需要这些数据同时过期,可以在设置过期时间的时候,给这些过期时间增加一个较小的随机数(如1-3分钟),这样不同数据的过期时间有所差别但差别也不是很大。

b.服务降级。雪崩发送时,针对不同的数据采取不同的措施。

(1)非核心数据(如电商商品的属性),暂时停止从缓存获取数据,而且返回预定值,空值或者异常信息。

(2)核心数据,仍然允许查询缓存,缓存中没有则从数据库获取。

2. redis缓存实例发送故障宕机导致无法处理缓存查询请求,使请求积压到数据库层。

解决方案:

a. 在业务系统中实现服务熔断或者请求限流。通过监控负载指标发现雪崩现象的发生,然后启动熔断机制,暂停业务应用对缓存服务的接口访问。而限流则是,在发现雪崩时,限制并发请求数量的访问,如限制到1000,多余的拒绝来降低底层数据库的访问压力。

b.事前预防,构建可靠的redis缓存集群。主节点宕机了,将从节点切换至主节点,继续提供缓存服务。

缓存击穿

描述:针对某个热点数据的频繁访问请求无法在缓存中得到处理,大量请求发送到数据库,数据库访问压力陡增,影响其他访问请求

产生的原因:该种问题多发于热点数据过期访问失效的场景。

解决方案:对于此类热点数据不设置过期时间

缓存穿透

描述:要访问的数据既不在缓存中,也不在数据库中。导致请求在访问缓存时,缓存缺失,在访问数据库时,数据库中也没有要访问的数据。

产生的原因:

1. 业务层误操作,缓存中和数据库中的数据被删除了,所以导致都访问不到

2. 恶意攻击,专门访问数据库中没有的数据,如查询id为-1的数据。

解决方案:

1. 缓存空值或者缺省值。发送此类情况时,可以在redis中缓存一个空值或者缺省值(如默认为0),后续访问可以从redis获取而不是到数据库

2. 使用布隆过滤器先判断数据是否存在,来避免从数据库中查询是否存在,减轻数据库的压力。

布隆过滤器介绍:

描述:布隆过滤器由一个初始值为0的bit数组和N个哈希函数组成

操作流程:

(1)使用N个哈希函数分别计算这个数据的哈希值,得到N个哈希值

(2)把N个哈希值对bit数组的长度取模,得到每个哈希值在数组中的对应位置。

(3)最后把对应位置的bit位设置为1,完成布隆过滤器中标记数据的操作。

使用方法:查询某个数据时,使用上面的计算流程,计算该数据在bit数组中所有对应的位置,只要有一个位置不为1,就表明该数据未被标记过,则不去执行数据库的查询操作。

3. 前端请求检测,主要检测请求的合法性,包括请求参数是否合理,请求参数是否是非法值,请求字段是否存在等。

最新文章

  1. string转byte[]
  2. Android源码阅读-Filter过滤器
  3. 开发https应用
  4. 【C++/Qt】Qt中的parent形参
  5. VBA_Excel_教程:表,格
  6. myeclipse 2014新建maven web 项目步骤
  7. 关于jquery easyui treegrid的问题
  8. centOS安装openoffice
  9. 常用px,pt,em换算表
  10. CentOS CVS安装使用
  11. Delphi泛型评测(30篇)
  12. HDU5726(RMQ&&二分)
  13. Linux 常用性能工具简介
  14. redis 实现
  15. 利用map和reduce编写一个str2float函数,把字符串'123.456'转换成浮点数123.456:
  16. javascript 一些特殊的写法
  17. 2018.5.2 file结构体
  18. 利用Linux信号SIGUSR1调试程序
  19. Html之网页分屏浏览
  20. Python学习 day10

热门文章

  1. GeoServer在Linux上源码安装、启动、发布地图服务
  2. LeetCode-1664 生成平衡数组的方案树
  3. LeetCode-156 上下翻转二叉树
  4. 【Java-01-2】java基础-基本语法(2)(关系运算,if,循环)
  5. rlwrap解决opengauss,pg,oracle上下左右及回退乱码
  6. 解决为知笔记docker镜像部署后登录连接mysql报错
  7. LinkedList的线程安全解决办法
  8. vue中vue2-google-maps使用谷歌地图的基础操作
  9. Web学习篇—Http协议
  10. 图片视频二进制流base64加密