共计 1403 个字符,预计需要花费 4 分钟才能阅读完成。
自动写代码机器人,免费开通
这篇文章主要介绍“怎么解决 redis 雪崩和穿透”,在日常操作中,相信很多人在怎么解决 redis 雪崩和穿透问题上存在疑惑,丸趣 TV 小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么解决 redis 雪崩和穿透”的疑惑有所帮助!接下来,请跟着丸趣 TV 小编一起来学习吧!
解决方法是:1、缓存穿透,可以把空的数据也缓存起来和使用布隆过滤器;2、缓存雪崩,可以设置对应热点 key 永不过期,多缓存结合,采购第三方 Redis,以及过期时间错开,过期时间使用随机生成即可。
本教程操作环境:windows7 系统、Redis5.0.10 版、DELL G3 电脑。
Redis 缓存穿透以及解决方法
一、缓存穿透
1. 当用户查询的 key 在 redis 中不存在,对应的 id 在数据库也不存在,此时被非法用户进行攻击,大量的请求会直接打在 db 上,造成宕机,从而影响整个系统,这种现象称之为缓存穿透。
2. 解决方案一:把空的数据也缓存起来,比如空字符串,空对象,空数组或 list,代码如下
if (list != null list.size() 0) { redisOperator.set( subCat: + rootCatId, JsonUtils.objectToJson(list));
} else { redisOperator.set( subCat: + rootCatId, JsonUtils.objectToJson(list), 5*60);
}
3. 解决方案二:布隆过滤器
布隆过滤器:判断一个元素是否在一个数组里面,如下图,利用二进制去做的一个存储,占用内存比较小,0 代表不存在,1 代表存在,添加查询效率很快,当保存了一个数值会经过一个算法将对应的值保存到布隆过滤器的集合上的某个位置,某个位置上可能会存在多个 key,当传进来一个不存在的 key 值,和集合进行匹配,如果匹配不上便会返回一个 null
缺点:1、1% 的误判率,当有一个 key 不存在布隆数组中,但是由于这个误判率,在某个情况下回判断这个 key 存在,当这个数组越长误判率越低,数组越短误判率越高
2、当我们要删除某个 key 值的时候,是会删除我们的数据库和 redis 中的内容,但是布隆数组中无法删除,因为数组的某个位置上会存在对个 key 如果我们要删除的话就是将 1 变成 0,但是会将其中所有的 key 值都删除
3. 代码复杂度也会增加,因为我们要额外去维护一个集合,当我们使用 redis 集群,布隆过滤器要和 redis 结合在一起使用
二、Redis 缓存雪崩
1. 缓存雪崩:缓存中的数据大批量失效,然后这个使用又要大量的请求进来,但是由于 redis 中的 key 全部失效了所有会全部请求到 db 上,造成宕机
2. 解决方案
设置对应热点 key 永不过期
过期时间错开,过期时间使用随机生成,并且热点数据的过期时间设置的长一点,非热点数据可以设置短一点
多缓存结合,例如:请求进入,可以现请求 redis,当 redis 中不存在的时候再去请求 memcache,如果都没有再去请求 db
采购第三方 Redis(阿里云或者腾讯云上的 redis)
到此,关于“怎么解决 redis 雪崩和穿透”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注丸趣 TV 网站,丸趣 TV 小编会继续努力为大家带来更多实用的文章!
向 AI 问一下细节