Redis常见面试题(缓存击穿、穿透、雪崩)

击穿

场景

一般由于redis中的数据到期,同时并发用户特别多,此时大量请求压到数据库上。

解决思路

根据redis是单进程单实例的特性,当高流量进入redis时,可以认为是在队列中依次执行,当请求发现key过期时,可以设置锁。

流程

  1. 请求到达redis,发现key过期,查看是否有锁,如果没有回到队列排队。
  2. 设置锁,用setnx(),也就是当key不存在时再设置,防止其他线程已经设置锁。
  3. 拿到锁后去数据库中取数据,返回后释放锁。

问题1

如果拿到锁以后的请求挂掉了,但是锁没有释放,会造成其他请求一直在等待锁的释放。

问题1解决方法

对这个锁加过期时间,到了过期时间还没释放,就自动释放。

问题2

如果请求没挂掉,但是锁的过期时间已经到了,数据还没取出来,会导致其他请求又设置锁,进入数据库取数据。。。

问题2解决方法

再开启一个线程,对第一个取数据的线程进行监控,如果没挂掉,就适当延长锁的过期时间。

穿透

场景

大量请求访问redis以及数据库中没有的数据,导致异常流量到达数据库查询返回null的结果。

解决思路

加过滤器,拦截异常请求。

流程

在客户端实现布隆过滤器的算法,或者直接在redis中集成布隆过滤器。同样的过滤器还有布谷鸟过滤器等。

雪崩

场景

大量的key同时失效,造成大量访问压到数据库上。

解决思路

首先要区分失效的key是否和时点性相关,然后采取不同的解决办法。

流程

  1. 如果是和时点无关的数据,可以采取给key加随机的过期时间。
  2. 如果是和时点有关的数据,如到凌晨0点必须统一失效的key,不能使用随机过期时间,否则到凌晨0点时会读到之前的数据,也就是脏数据。可以强依赖击穿的解决方法。先过去的线程更新key,业务层对其他请求做延迟,睡几十毫秒或者秒。

Redis做分布式锁

  1. 通过setnx()加锁。
  2. 给锁加过期时间。
  3. 通过多线程监控,适当延长锁的过期时间。
  4. 以上三点是解决思路,实现过程较为麻烦,最好通过zookeeper做分布式锁(关于zookeeper内容可以订阅zookeeper专栏)。

Redis常见面试题(缓存击穿、穿透、雪崩)相关推荐

  1. Redis常见面试题总结

    Redis常见面试题 持久化方式有哪些?有什么区别? redis持久化方案分为RDB和AOF两种. RDB RDB持久化可以手动执行也可以根据配置定期执行,它的作用是将某个时间点上的数据库状态保存到R ...

  2. 七天玩转Redis 第七天打卡 Redis常见面试题及课程总结

    七天玩转Redis 第七天打卡 Redis常见面试题及课程总结 主要总结点: 截止到今天,七天玩转Redis课程就马上结束了,学以致用,那么学会了Redis,在找工作时会有哪些面试官爱问的问题呢? 一 ...

  3. 面经 | Redis常见面试题

    Redis 常见面试题 目录结构: 文章目录 Redis 常见面试题 数据结构 String 哈希 List Set Zset 有序集合 持久化机制 RDB快照 AOF 混合使用 Redis为什么要线 ...

  4. 你需要知道的缓存击穿/穿透/雪崩

    目录 缓存击穿/穿透/雪崩 Intro 缓存击穿 缓存穿透 缓存雪崩 Reference Contact 缓存击穿/穿透/雪崩 Intro 使用缓存需要了解几个缓存问题,缓存击穿.缓存穿透以及缓存雪崩 ...

  5. 缓存击穿/穿透/雪崩

    缓存击穿/穿透/雪崩 Intro 使用缓存需要了解几个缓存问题,缓存击穿.缓存穿透以及缓存雪崩,需要了解它们产生的原因以及怎么避免,尤其是当你打算设计自己的缓存框架的时候需要考虑如何处理这些问题. 缓 ...

  6. 面试常问:redis缓存击穿/穿透/雪崩

    1. 讲个故事 一个人去门店买联想电脑,线下门店没有货了,于是店员给厂家打电话问问有没有货,厂家发现也没货了,这个人就走了.过了一会另一个人也要来买联想电脑,然后店员又打电话问了一次厂家,如此反复.这 ...

  7. redis——缓存击穿/穿透/雪崩

    缓存穿透 一般的缓存系统,都是按照key去缓存查询,如果不存在对应的value,就去后端系统查找(比如DB). 一些恶意的请求会故意查询不存在的key,请求量很大,就会对后端系统造成很大的压力.这就叫 ...

  8. 分布式缓存Redis常见面试题

    1.简单说一下Redis Cluster集群模式? Cluster是redis 3.0推出,采用无中心结构,每个节点保存数据和整个集群状态,每个节点都和其他所有节点连接.Cluster数据分片的算法有 ...

  9. Redis数据读取(缓存击穿,穿透,雪崩)

    内容文件参考"付费专栏"可领取.专栏购买者提供本内容"永久答疑和远程协助"服务.一诺千金! N.1 缓存处理流程 1)前台请求,后台先从缓存中取数据,取到直接返 ...

最新文章

  1. FD.io/VPP — VPP Agent — Telemetry Plugin
  2. 关于一些对location认识的误区(转)
  3. 纳税服务系统八【系统、子系统首页】
  4. dede文章异步ajax加载,织梦DedeCMS列表“加载更多”“无限下拉”Ajax加载使用方法...
  5. Hexo中next主题的个性化配置
  6. dreamweaver 正则表达式为属性值加上双引号_IT兄弟连 HTML5教程 HTML5表单 新增的表单属性3...
  7. dispatcherServlet流程图
  8. java可以用var定义吗_浅析java 10中的var关键字用法
  9. getchar() 和getch()
  10. 88.合并两个有序数组(力扣leetcode)博主可答疑该问题
  11. Anaconda下载安装
  12. esxi能直通的显卡型号_2020最适合新手CG玩家的电脑配置【显卡--专业卡、游戏卡】...
  13. 手机开热点但是电脑一直连接不上_电脑连接手机热点无法上网的三种解决方法...
  14. linux中文找不到resource,linux :Resource temporarily unavailable错误解决
  15. C++笔试面试题 从网上整理的,带答案
  16. 2022年2月国产数据库排行榜:冠军宝座面临挑战,OceanBase 重返 TOP3
  17. 图片合成雾的方法概述
  18. 手机怎么把照片转JPG格式?这两种方法可以迅速转换
  19. 判断手机号所属运营商--课后程序(Python程序开发案例教程-黑马程序员编著-第11章-课后作业)
  20. JVM探秘:垃圾收集器

热门文章

  1. 5个值得推荐的英语学习网站及1个英语学习App
  2. mysql 时间戳与java_Mysql时间戳转Java时间戳
  3. JS中获取cookie的最简单方式
  4. ​DevStream 团队在背后都是怎么“吐槽”用户的
  5. 如何学习嵌入式软件?一位嵌入式学员的心得总结
  6. GooglePlay Console语言设置
  7. ios 11 适配遇到的问题
  8. 大话2怎么找物价稳定服务器,大话西游2新区“补天神石”的价格,见证着服务器物价的走势...
  9. 乐S3首销售罄,高性价比千元旗舰引爆手机市场
  10. 如何利用订制笔记本为企业宣传服务