目录

  • 一、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通常都会被用来做缓存服务器,解决高并发下数据响应慢的问题,同时也减少数据库服务器的压力。

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

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

1、缓存穿透

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

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

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

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

2、缓存击穿

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

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

3、缓存雪崩

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

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

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

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

Redis缓存知识-穿透、击穿、雪崩相关推荐

  1. Redis缓存/穿透/击穿/雪崩

    目录 1 缓存穿透 1.1 问题描述 1.2 产生原因 1.3 解决方案 2 缓存击穿 2.1 问题描述 2.2 解决方案 3 缓存雪崩 3.1 问题描述 3.2 解决方案: 1 缓存穿透 1.1 问 ...

  2. Redis缓存穿透击穿雪崩

    目录 1.缓存穿透 2.缓存击穿 3.缓存雪崩 1.缓存穿透 概述: 缓存穿透的概念很简单,用户想要査询一个数据,发现redis内存数据库没有,也就是缓存没有命中,于是向持久层数据库査询.发现也数据库 ...

  3. 一文搞懂Redis缓存穿透/击穿/雪崩

    缓存穿透 问题描述 缓存穿透是指查询一个一定不存在的数据,由于缓存时不命中的,则需要从数据库中查询.查不到数据则不写入缓存,这将导致这个不存在的数据每次请求都要到数据库中去查询,进而增大了数据库的压力 ...

  4. Redis综述篇:与面试官彻夜长谈Redis缓存、持久化、淘汰机制、哨兵、集群底层原理!...

    点击上方关注 "终端研发部" 设为"星标",和你一起掌握更多数据库知识 于哥你好,最近面试挺多的,尤其是在问到java面试题,Redis被问的特别多,比如Red ...

  5. Redis入门到实战(实战篇)缓存更新、穿透、雪崩、击穿!

    Redis基础篇 Java面试宝典-redis 实战篇Redis 开篇导读 亲爱的小伙伴们大家好,马上咱们就开始实战篇的内容了,相信通过本章的学习,小伙伴们就能理解各种redis的使用啦,接下来咱们来 ...

  6. Redis缓存击穿、雪崩、穿透!(超详细)

    缓存的击穿.穿透和雪崩应该是再熟悉不过的词了,也是面试常问的高频试题. 不过,对于这三大缓存的问题,有很多人背过了解决方案,却少有人能把思路给理清的. 而且,网络上仍然充斥着,大量不太靠谱的解决方案, ...

  7. Redis学习 - NoSQL简介、redis安装、redis基础知识、数据类型、持久化、订阅发布、主从复制、哨兵模式、缓存击穿和雪崩

    学习视频地址:https://www.bilibili.com/video/BV1S54y1R7SB 完结撒花,感谢狂神 文章目录 1. NoSQL 1.1 单机Mysql的演进 1.2 当今企业架构 ...

  8. Redis 缓存雪崩、击穿、穿透

    Redis 缓存雪崩.击穿.穿透 文章目录 Redis 缓存雪崩.击穿.穿透 一.Redis基础 Redis基本数据类型.操作 二.面试相关问题 1.小伙子您好,看你简历上写了你项目里面用到了Redi ...

  9. Redis 缓存击穿,缓存穿透,缓存雪崩原因+解决方案

    一.前言 在我们日常的开发中,无不都是使用数据库来进行数据的存储,由于一般的系统任务中通常不会存在高并发的情况,所以这样看起来并没有什么问题,可是一旦涉及大数据量的需求,比如一些商品抢购的情景,或者是 ...

最新文章

  1. 2.2.1 静态成员
  2. Vim快捷输出查找寄存器的内容(去除\,\和\V)
  3. 没有docker,谈什么微服务架构?
  4. UITableView 重用cell方法edequeueReusableCellWithIdentifier,出现错误
  5. 一个简单的Makefile模板
  6. MyBatis复习(十):注解开发
  7. BZOJ:4820: [Sdoi2017]硬币游戏BZOJ:1444: [Jsoi2009]有趣的游戏(高斯消元求概率)
  8. SQL server 查询语句
  9. 【干货】微信私域运营实战指南.pdf(附下载链接)
  10. 计算机视觉(CV)中图像的梯度
  11. java设计模式--基础思想总结--抽象类与架构设计思想
  12. ant design pro(二)布局
  13. pymssql的简单使用
  14. echarts地图各种点位实现
  15. EM30719 i2c不能正常读
  16. 聊聊接口性能优化的11个小技巧
  17. 【菜鸟进阶之路】P2141 珠心算测验 - 洛谷
  18. [Data Structure] 数据结构中各种树
  19. Vue.js学习详细课程系列--共32节(4 / 6)
  20. 工业物联网 | 智能网关实现换热站远程监控方案

热门文章

  1. 获取当前登录用户的IP地址代码
  2. 基于JavaWeb+MySQL的简历信息管理系统
  3. Linux Panic 机制解析
  4. Jetpack MVVM 七宗罪之四: 使用 LiveData/StateFlow 发送 Events
  5. 提升方法(Boosting)
  6. web前端自学该怎么规划学习
  7. SNMP4J(通过java实现SNMP协议)
  8. python 跳跃游戏
  9. 微信开放平台开发第三方授权登陆(二):PC网页端
  10. 1、Python培训 Python 简介