• Redis缓存知识-穿透、击穿、雪崩


    大家好,我是杨叔。每天进步一点点,关注我的微信公众号【程序员杨叔】,获取更多测试开发技术知识!今天分享的内容是:Redis缓存知识-穿透、击穿、雪崩。

    一、Redis介绍

    Redis是一个C语言编写的开源的高性能的key-value 数据库, 是目前分布式架构中不可或缺的一环。Redis具备以下的特点:

    • Redis具有极高的数据读写速度:数据读取的速度最高可达到 110000 次/s,数据写入速度最高可达到81000次/s,平均100000次/s;
    • Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储;
    • Redis支持分布式集群部署,以应对高并发压力,集群通过分片( sharding )来实现数据共享,并提供复制和故障转移;
    • Redis的所有操作都是原子性的,所谓原子操作就是指这种操作一旦开始,就一直运行到结束,不会被线程调度机制打断的操作,中间不会有任何context switch(切换到另一个线程)。在多线程访问共享资源时,能够确保所有其他的线程都不在同一时间 内访问相同的资源,从而保证数据是可靠的。

    二、Redis做缓存服务器

    由于Redis具备的高数据读写特性,因此Redis通常都会被用来做缓存服务器,解决高并发下数据响应慢的问题,同时也减少数据库服务器的压力。

    作为测试同学,不管是功能测试还是性能测试,都是非常有必要了解缓存业务是如何实现的。缓存业务逻辑图举例说明如下:

    在这里插入图片描述

    三、缓存穿透&击穿&雪崩

    1、缓存穿透

    问题描述:用户发起大量的请求,结果发现 Redis 中没有数据,后台查询数据库,发现数据库也没有数据,因为没有数据,也就不能更新缓存,就这样一直请求落到了数据库,导致数据库崩溃;这种大量的请求,可能是接口本身的并发量就比较大,也可能是有黑客在攻击。

    在这里插入图片描述

    解决方案
    异常参数校验:比如发起一个 id 为 “-1” 的请求,这一看就是有问题的,哪有可能 id 为负数的。或者一些非空参数,传了空值,极有可能是某人在发起攻击,直接后台判断拦截;优点: 最快,也是最简单的拦截方式,没有额外的资源开销,缺点: 适用的场景有限;

    空值缓存:当查询缓存和数据库都没有值时,给缓存中更新一个查询结果,值为空值并设置过期时间;

    布隆过滤器:布隆过滤器是一种数据结构,部署在redis的前面,去拦截数据,减少对redis的冲击。对所有可能查询到的参数都以hash的方式存储在布隆过滤器中,当一个查询请求过来时,先经过布隆过滤器在控制层进行校验,如果判断请求查询值存在,则继续查,如果判断请求查询不存在,直接丢弃,这就避免了对底层存储系统的压力。

    2、缓存击穿

    问题描述:用户发起大量的请求,这时 Redis 中数据大量过期,导致瞬间数据库压力暴增,导致数据库宕机;或者用户大量访问非热点数据,没有在Redis中缓存,导致瞬间数据库压力暴增,导致数据库宕机;
    在这里插入图片描述

    解决方案
    设置热点数据永远不过期;
    设置热点数据的存活时间较长,且分布均匀的岔开过期时间,降低了出现大量过期的频率;
    所有可能高频访问的数据提前做好缓存预热;
    限流做安全保障;

    3、缓存雪崩

    问题描述:Redis 层由于压力过大,导致 Redis 服务器宕机,所有后端请求直接落在数据库上,导致数据库也宕机;
    在这里插入图片描述

    解决方案
    Redis 高可用:顾名思义,通过多台的 Redis 架设集群,分摊压力;
    限流:通过限制访问数量的方式,防止大量的请求进入缓存,可以通过限制 IP 频率,限制请求总量,或者使用消息队列依次处理请求等方式;

    =================================================================================================

    以上就是本次的全部内容,如果对你有帮助,欢迎关注我的微信公众号:程序员杨叔,各类文章、测试资料都会第一时间在上面发布,持续分享全栈测试知识干货,你的支持就是作者更新最大的动力~
    在这里插入图片描述

  • 相关阅读:
    安装rsa依赖库出现ERROR: No matching distribution found for rsa
    【数据结构与算法】深度剖析“八大排序”(上)_ 探寻一些不为人知的细节
    内网渗透——哈希传递
    window的addEventListener和removeEventListener方法的使用踩雷
    常用H标签的补充:html5
    Edge Linux 正式版发布
    Prototype 原型模式简介与 C# 示例【创建型4】【设计模式来了_4】
    【第20例】华为 IPD 体系 | IPD 的底层思考逻辑(限制版)
    读取.nrrd和.dcm文件格式医学图片可视化与预处理
    简单聊聊异常体系
  • 原文地址:https://blog.csdn.net/baidu_28340727/article/details/126662735