redis如何解决缓存雪崩和穿透

58次阅读
没有评论

共计 1354 个字符,预计需要花费 4 分钟才能阅读完成。

自动写代码机器人,免费开通

本篇内容介绍了“redis 如何解决缓存雪崩和穿透”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让丸趣 TV 小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

缓存穿透的解决方法:1、把空的数据也缓存起来;2、利用布隆过滤器。2、缓存雪崩的解决方法:1、设置对应热点 key 永不过期;2、过期时间错开,过期时间使用随机生成,且热点数据的过期时间设置的长一点;3、多缓存结合;4、采购第三方 Redis。

本教程操作环境:windows7 系统、Redis6 版、DELL G3 电脑。

Redis 缓存穿透和雪崩的解决方法

一、缓存穿透

当用户查询的 key 在 redis 中不存在,对应的 id 在数据库也不存在,此时被非法用户进行攻击,大量的请求会直接打在 db 上,造成宕机,从而影响整个系统,这种现象称之为缓存穿透。

解决方案一:把空的数据也缓存起来,比如空字符串,空对象,空数组或 list,代码如下

if (list != null   list.size()   0) { redisOperator.set( subCat:  + rootCatId, JsonUtils.objectToJson(list));
} else { redisOperator.set( subCat:  + rootCatId, JsonUtils.objectToJson(list), 5*60);
}

解决方案二:布隆过滤器

布隆过滤器:

判断一个元素是否在一个数组里面,如下图,利用二进制去做的一个存储,占用内存比较小,0 代表不存在,1 代表存在,添加查询效率很快,当保存了一个数值会经过一个算法将对应的值保存到布隆过滤器的集合上的某个位置,某个位置上可能会存在多个 key,当传进来一个不存在的 key 值,和集合进行匹配,如果匹配不上便会返回一个 null

缺点:

1、1% 的误判率,当有一个 key 不存在布隆数组中,但是由于这个误判率,在某个情况下回判断这个 key 存在,当这个数组越长误判率越低,数组越短误判率越高

2、当我们要删除某个 key 值的时候,是会删除我们的数据库和 redis 中的内容,但是布隆数组中无法删除,因为数组的某个位置上会存在对个 key 如果我们要删除的话就是将 1 变成 0,但是会将其中所有的 key 值都删除

3、代码复杂度也会增加,因为我们要额外去维护一个集合,当我们使用 redis 集群,布隆过滤器要和 redis 结合在一起使用

redis 如何解决缓存雪崩和穿透

二、Redis 缓存雪崩

缓存雪崩:缓存中的数据大批量失效,然后这个使用又要大量的请求进来,但是由于 redis 中的 key 全部失效了所有会全部请求到 db 上,造成宕机

解决方案

1. 设置对应热点 key 永不过期
2. 过期时间错开,过期时间使用随机生成,并且热点数据的过期时间设置的长一点,非热点数据可以设置短一点
3. 多缓存结合,例如:请求进入,可以现请求 redis,当 redis 中不存在的时候再去请求 memcache,如果都没有再去请求 db
4. 采购第三方 Redis(阿里云或者腾讯云上的 redis)

“redis 如何解决缓存雪崩和穿透”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注丸趣 TV 网站,丸趣 TV 小编将为大家输出更多高质量的实用文章!

向 AI 问一下细节

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-12-04发表,共计1354字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)