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

目录

    • 一、Redis介绍
    • 二、Redis做缓存服务器
    • 三、缓存穿透&击穿&雪崩
            • 1、缓存穿透
            • 2、缓存击穿
            • 3、缓存雪崩

大家好,我是杨叔。每天进步一点点,关注我的微信公众号【程序员杨叔】,获取更多测试开发技术知识!今天分享的内容是: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通常都会被用来做缓存服务器,解决高并发下数据响应慢的问题,同时也减少数据库服务器的压力。

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

Redis缓存知识-穿透、击穿、雪崩_第1张图片

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

1、缓存穿透

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

Redis缓存知识-穿透、击穿、雪崩_第2张图片

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

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

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

2、缓存击穿

问题描述:用户发起大量的请求,这时 Redis 中数据大量过期,导致瞬间数据库压力暴增,导致数据库宕机;或者用户大量访问非热点数据,没有在Redis中缓存,导致瞬间数据库压力暴增,导致数据库宕机;
Redis缓存知识-穿透、击穿、雪崩_第3张图片

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

3、缓存雪崩

问题描述:Redis 层由于压力过大,导致 Redis 服务器宕机,所有后端请求直接落在数据库上,导致数据库也宕机;
Redis缓存知识-穿透、击穿、雪崩_第4张图片

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

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

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

你可能感兴趣的:(性能测试,redis,缓存,数据库,压力测试)