redis雪崩和穿透如何解决_redis穿透和雪崩解决

redis雪崩和穿透如何解决_redis穿透和雪崩解决redis

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

这篇文章主要介绍“怎么解决redis雪崩和穿透”,在日常操作中,相信很多人在怎么解决redis雪崩和穿透问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么解决redis雪崩和穿透”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

解决方法是: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雪崩和穿透”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识请继续关注,小编会继续努力为大家带来更多实用的文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/193965.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 2020年当下软件园软件下载总排行榜

    2020年当下软件园软件下载总排行榜一、主题式网络爬虫设计设计方案1.爬虫名称:2020年当下软件园软件下载总排行榜。2.爬取内容:排名、软件类型、软件名称、用户评分、内存大小、评级。3.爬虫设计方案概述:(1)思路:找到要爬取

    2022年8月4日
    9
  • win10文件访问被拒绝_windows10已拒绝远程连接

    win10文件访问被拒绝_windows10已拒绝远程连接尝试以下方法:1)开启|关闭防火墙(这里需要关闭)sudoufwenable|disable2)开启远程服务在终端界面输入:servicesshdstart。结果显示:ssh:unrecognizedservice。输入查看命令:servicesshstatus显示也是unrecognizedservice。开启远程服务:终端界…

    2022年9月17日
    0
  • resnet18与resnet50

    resnet18与resnet50ResNet18的18层代表的是带有权重的18层,包括卷积层和全连接层,不包括池化层和BN层。Resnet论文给出的结构图参考ResNet详细解读结构解析:首先是第一层卷积使用7∗77∗7大小的模板,步长为2,padding为3。之后进行BN,ReLU和maxpool。这些构成了第一部分卷积模块conv1。然后是四个stage,代码中用make_layer()来生成stage…

    2022年5月9日
    321
  • Pytest(3)fixture的使用

    Pytest(3)fixture的使用fixture的优势Pytest的fixture相对于传统的xUnit的setup/teardown函数做了显著的改进:命名方式灵活,不局限于setup和teardown这几个命名conf

    2022年7月29日
    2
  • 电脑组装机知识_电脑组装入门知识

    电脑组装机知识_电脑组装入门知识“玩的次数多了自然就会了”笔者一直都对这句话深信不疑,小编我也是一个爱玩的人,从小参加各种极限运动,上学逃课去网吧,下课依然逃课去网吧!而现在上班了玩DIY,下班了玩车。不过玩什么之前都有一段入门的过程,没有人天生就会,DIY也一样刚开始也有一个学习的过程,今天笔者就带想入门的DIY玩家从最基础的硬件配置开始入门的旅程!广大的骨灰级玩家,在此文章中会有不少最为基础的介绍,若有问题的还请大家多多吐槽…

    2022年9月3日
    3
  • jmeter   如果(if)控制器使用,如果满足条件则执行操作。

    jmeter   如果(if)控制器使用,如果满足条件则执行操作。

    2021年9月18日
    67

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号