缓存问题

  • 分布式缓存
  • Redis缓存雪崩
  • Redis缓存击穿
  • Redis缓存穿透
  • 缓存预热
  • 缓存降级

Redis缓存雪崩

出现概率: ★★★★★

这个在Redis面试的题目中算是出镜率特别高的问题了, 建议仔细消化一下。

1)、缓存雪崩是指大量的缓存key无法在Redis缓存中进行处理,紧接着,短时间大量请求直接打到数据库层,导致数据库层的压力激增, 可能瞬间就会导致数据库宕机。

缓存雪崩一般是由两个原因导致的,应对方案也有所不同,我们一个个来看。

第一个原因是:缓存中有大量数据同时过期,比如说一些APP首页缓存数据,都设置了当天有效, 凌晨过期, 在第二天流量高峰时, 大量用户访问的请求, 没有换成从数据库中读取数据。如果应用的并发请求量很大,那么数据库的压力也突然变得很大,可能会造成缓存雪崩。

这种类似的问题解决思路也基本简单, 打散过期时间, 比如设置过期时间为 24小时之后 + 随机N分钟。

另外一个原因是Redis宕机, 这个就需要分析Redis宕机的原因了, 是因为磁盘满了还是内存满了, 根据情况进行处理,或者升配置什么的。 如果是内存满了, 也需要考虑是不是缓存过期回收策略的问题。

Redis缓存击穿

出现概率: ★★★★

缓存击穿跟缓存雪崩有点类似,缓存雪崩是大规模的key失效,而缓存击穿是某个热点的key失效,大并发集中对其进行请求,就会造成大量请求读缓存没读到数据,从而导致高并发访问数据库,引起数据库压力剧增。这种现象就叫做缓存击穿。

解决方案:

a)、在缓存失效后,通过互斥锁或者队列来控制读数据写缓存的线程数量,比如某个key只允许一个线程查询数据和写缓存,其他线程等待。这种方式会阻塞其他的线程,此时系统的吞吐量会下降

b)、热点数据缓存永远不过期。

永不过期实际包含两层意思:

物理不过期,针对热点key不设置过期时间

逻辑过期,把过期时间存在key对应的value里,如果发现要过期了,通过一个后台的异步线程进行缓存的构建

Redis缓存穿透

出现概率: ★★★★

缓存穿透是指用户请求的数据在缓存中不存在即没有命中,同时在数据库中也不存在,导致用户每次请求该数据都要去数据库中查询一遍。

如果短时间大量类似请求落在数据库上,造成数据库压力过大,可能导致数据库承受不住而宕机崩溃。

解决方法:

a)、将无效的key存放进Redis中:

当出现Redis查不到数据,数据库也查不到数据的情况,我们就把这个key保存到Redis中,设置value="null",并设置其过期时间极短,后面再出现查询这个key的请求的时候,直接返回null,就不需要再查询数据库了。但这种处理方式是有问题的,假如传进来的这个不存在的Key值每次都是随机的,那存进Redis也没有意义。

b)、使用布隆过滤器:

如果布隆过滤器判定某个 key 不存在布隆过滤器中,那么就一定不存在,如果判定某个 key 存在,那么很大可能是存在(存在一定的误判率)。于是我们可以在缓存之前再加一个布隆过滤器,将数据库中的所有key都存储在布隆过滤器中,在查询Redis前先去布隆过滤器查询 key 是否存在,如果不存在就直接返回,不让其访问数据库,从而避免了对底层存储系统的查询压力。

Redis缓存预热

出现概率: ★★★

缓存预热如字面意思,当系统上线时,缓存内还没有数据,如果直接提供给用户使用,每个请求都会穿过缓存去访问底层数据库,如果并发大的话,很有可能在上线当天就会宕机,因此我们需要在上线前先将数据库内的热点数据缓存至Redis内再提供出去使用,这种操作就成为"缓存预热"。

缓存预热的实现方式有很多,比较通用的方式是写个批任务,在启动项目时或定时去触发将底层数据库内的热点数据加载到缓存内。

Redis缓存降级

出现概率: ★★★

缓存降级是指当访问量剧增、服务出现问题(如响应时间慢或不响应)或非核心服务影响到核心流程的性能时,即使是有损部分其他服务,仍然需要保证主服务可用。可以将其他次要服务的数据进行缓存降级,从而提升主服务的稳定性。

降级的目的是保证核心服务可用,即使是有损的。如去年双十一的时候淘宝购物车无法修改地址只能使用默认地址,这个服务就是被降级了,这里阿里保证了订单可以正常提交和付款,但修改地址的服务可以在服务器压力降低,并发量相对减少的时候再恢复。

更多的java课程学习路线,笔记,面试等架构资料,需要的同学可以私信我(面试)即可免费获取!

2022年Redis最新面试题第8篇 - Redis缓存问题相关推荐

  1. 2022年Redis最新面试题第3篇 - Redis事务

    事务 怎么理解 Redis 事务? Redis事务执行过程 Redis事务的一些使用场景 Redis事务与Redis pipeline的区别 集群模式下Redis事务如何保证原子性 怎么理解 Redi ...

  2. 2022年Redis最新面试题

    2022年Redis最新面试题 一.Redis基础知识 1.什么是 Redis, 有哪些优缺点? 2.Redis 最适合的场景, 可以简单的说说吗? 3.Redis 相比 Memcached 有哪些优 ...

  3. 2022年MySQL最新面试题

    2022年MySQL最新面试题目录 前言 一.数据库基础知识 0.概要 1.平时MySQL主要用哪个版本 2.数据库三大范式是什么 3.MySQL有关权限的表都有哪几个 4.MySQL的binlog有 ...

  4. 2020前端最新面试题(vue篇)

    2020前端最新面试题(vue篇) 由于疫情原因,原本每年的"金三银四"仿佛消失,随之而来的是找工作的压力,这里给要面试的小伙伴们总结了到目前为止我遇到的前端面试题,仅供参考哦,第 ...

  5. 2022年Redis最新面试题- Redis集群

    最近整理一份关于Redis常见面试题的,也会根据自己的经验, 标注一些出现的概率,最高5颗★出现的概率最高.比如这样: Redis 最适合的场景, 可以简单的说说吗? 出现概率: ★★★★ 整体目录大 ...

  6. 2022年Redis最新面试题- Redis分布式锁

    最近整理一份关于Redis常见面试题的,也会根据自己的经验, 标注一些出现的概率,最高5颗★出现的概率最高.比如这样: Redis 最适合的场景, 可以简单的说说吗? 出现概率: ★★★★ 整体目录大 ...

  7. 2022年Redis最新面试题 - Redis缓存问题

    缓存问题 分布式缓存 Redis缓存雪崩 Redis缓存击穿 Redis缓存穿透 缓存预热 缓存降级 #Redis缓存雪崩 出现概率: ★★★★★ 这个在Redis面试的题目中算是出镜率特别高的问题了 ...

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

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

  9. 为什么redis取出来是null_[2020] Redis 最新面试题

    Redis 的数据类型(数据结构) string (二进制安全,可以存储任意类型的数据) list(链表) 字典(就是hashmap) set(不重复无序的hashmap) zset(按照给定的 sc ...

最新文章

  1. Download interrupted: URL not found.
  2. 你必须会的DFS的递归实现与堆栈实现
  3. 单片机小白学步系列(六) 单片机最小系统——麻雀虽小,五脏俱全
  4. 计算机安全基础:加密技术知识笔记
  5. 小 X 的 AK 计划
  6. 《Python程序设计》——1.2 程序开发周期
  7. UI自动化测试 appium简介
  8. JavaScript 通过字符串获取function
  9. 在html设置文字位置,html设置怎么文字的位置
  10. windows 7系统安装与配置Tomcat服务器环境
  11. 华为java安全编程规范考试答案
  12. mac上利用openssl命令进行软件安装包的哈希校验
  13. 砂糖橘文案:水果砂糖橘的文案,水果文案砂糖橘
  14. vue3使用flv.js播放推流视频,完整版组件
  15. 傅里叶变换后信号的频谱分析中相位角的求法
  16. 使用了 23 的 Java 真的收费了吗?
  17. 算法 图1 列出连通集
  18. 亲爱的老狼-搜索引擎的区分及现在各大浏览器的引擎细分
  19. Neat算法讲解(遗传拓扑神经网络)
  20. 文墨绘学21天习惯养成方法,学好就会优秀

热门文章

  1. android 打开公众号页面_微信公众号页面适配
  2. JavaScript去重
  3. 微信小程序--》从零实现小程序项目案例
  4. 到底是先就业还是先择业?
  5. 原来微信视频号视频保存到本地这么简单
  6. 微信分享自定义图片标题摘要-微信官方API
  7. 小程序群发短信,借助云开发5行代码实现短信群发功能
  8. html页面之间跳转失败,js跳转到上一页面失败的解决方法
  9. C++(三)之namespace的作用
  10. 运动耳机哪种好、口碑最好的运动蓝牙耳机排行榜