IT评测·应用市场-qidao123.com技术社区

标题: Redis三大缓存问题及办理方法(雪崩、击穿、穿透) [打印本页]

作者: 三尺非寒    时间: 2024-8-18 18:43
标题: Redis三大缓存问题及办理方法(雪崩、击穿、穿透)
缓存雪崩

当大量缓存数据在同一时间过期(失效)或者Redis故障宕机时,如果此时有大量的用户请求,都无法在Redis中处理,于是全部请求都直接访问数据库,从而导致数据库的压力骤增,严重的会造成数据库宕机,从而形成一系列连锁反应,造成整个系统崩溃,这就是缓存雪崩的问题。

导致缘故原由


常看法决方法

针对大量数据同时过期而引发的缓存雪崩问题,常见的应对方法有下面这几种
​ 实现互斥锁的时间,最好设置超时时间,否则第一个请求拿到了锁,然后这个请求发生了某种不测而一直阻塞,一直不释放锁,这时 其他请求也一直拿不到锁,整个系统就会出现无响应的征象。
针对 Redis 故障宕机而引发的缓存雪崩问题,常见的应对方法有下面这几种


缓存击穿

如果缓存中某个热门数据过期了,此时大量的请求访问了该热门数据,就无法从缓存中读取,直接访问数据库,数据库很容易被高并发的请求冲垮,这就是缓存击穿问题。
缓存击穿跟缓存雪崩很相似,也可以以为缓存击穿是缓存雪崩的一个子集

常看法决方法


缓存击穿和缓存雪崩的区别

缓存雪崩:在某一个时间段,缓存数据同时失效。导致大量请求直接到达数据库,导致数据库瞬间压力骤增,设置宕机。
缓存击穿:针对某一个key(热门数据)的请求,大量并发请求都查询这一个数据,但是该数据不在缓存中,导致多请求直接访问数据库,而其他请求被阻塞等待该请求的返回结果,导致系统性能降落。
也就是说,缓存击穿指并发查同一条数据,缓存雪崩是差别数据都过期了,很多数据都查不到从而查数据库
缓存穿透

当用户访问的数据,既不在缓存中,也不在数据库中,导致请求在访问缓存时,发现缓存缺失,再去访问数据库时,发现数据库中也没有要访问的数据。那么此时大量的请求都落在数据库中,导致数据库压力骤增,这就是缓存穿透问题。

导致缘故原由

  1. 1. 业务误操作,缓存中的数据和数据库中的数据都被误删除了,所以导致缓存和数据库中都没有数据;
  2. 2. 黑客恶意攻击,故意大量访问某些读取不存在数据的业务;
复制代码
常看法决方法

布隆过滤器说数据不存在,那么数据库中一定不会有这个数据。如果说数据存在,并不一定证明数据库中存在这个数据,有误判的几率,只不过几率非常小。
那么为什么会出现误判的几率呢?那就要考虑布隆过滤器的原理了
布隆过滤器由「初始值都为 0 的位图数组」和「 N 个哈希函数」两部门组成。当我们在写入数据库数据时,在布隆过滤器里做个标记,如许下次查询数据是否在数据库时,只需要查询布隆过滤器,如果查询到数据没有被标记,阐明不在数据库中。
布隆过滤器会通过 3 个操纵完成标记:

举个例子,假设有一个位图数组长度为 8,哈希函数 3 个的布隆过滤器。

在数据库写入数据 x 后,把数据 x 标记在布隆过滤器时,数据 x 会被 3 个哈希函数分别计算出 3 个哈希值,然后在对这 3 个哈希值对 8 取模,假设取模的结果为 1、4、6,然后把位图数组的第 1、4、6 位置的值设置为 1。当应用要查询数据 x 是否数据库时,通过布隆过滤器只要查到位图数组的第 1、4、6 位置的值是否全为 1,只要有一个为 0,就以为数据 x 不在数据库中
布隆过滤器由于是基于哈希函数实现查找的,高效查找的同时存在哈希辩论的大概性,比如数据 x 和数据 y 大概都落在第 1、4、6 位置,而究竟上,大概数据库中并不存在数据 y,存在误判的情况。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 IT评测·应用市场-qidao123.com技术社区 (https://dis.qidao123.com/) Powered by Discuz! X3.4