文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

三分钟带你掌握缓存穿透、缓存雪崩、缓存击穿,以及应对方案!

2024-12-13 15:55

关注

在前几篇关于 redis 的介绍文章中,我们说到项目中之所以会引入分布式缓存服务,主要是为了解决集群环境下,内存数据不共享的问题,比如 session 会话,以及一些字典缓存等等,在当前服务器的内存中存储,在另一台服务器中难以获取查询的问题,通过引入缓存服务,将缓存数据统一归一到一个服务器里面,以解决系统中内存数据不共享的问题,同时缓存性能也不会受到很大影响。

当然软件开源市场上,也有很多的分布式缓存服务,比如比较有名的有 redis、memcached 等,相对比 memcached,redis 各项指标都要比 memcached 强很多,Redis 号称能读的速度是 110000 次/s,写的速度是 81000次/s,无数的实践证明 redis 确实是当前一款非常高性能的内存数据库。

站在面试官的角度,软件系统的技术选型以及以上的相关技术问题,在实际的生产环境中确实也会发生,通过以此话题为切入点,可以更加清晰的了解面试者是否也碰到过类似的问题,以及对应处理的办法。

那么站在面试者的角度,除了熟练的掌握 redis 的使用方法以外,我们可能还需要更加深入的了解如果引入 redis 之后,系统中可能会发生的一些问题以及应对办法。

今天我们一起聊聊吧。

二、常见问题

2.1、问题一:为什么存入 redis 的数据,查询失效

Redis 的所有数据都是保存在内存中,然后不定期的通过异步方式保存到磁盘上;也可以把每一次数据变化都写入到一个aof日志文件里面,当 redis 的服务器重启的时候,自动从日志文件里面恢复数据到内存中。

有哪些场景会发生缓存失效呢?总结起来有以下两种场景:

2.2、问题二:缓存与数据库的数据不一致

通常情况下我们使用缓存,其中有一个很重要的目的就是降低数据库的访问压力,比如商品的信息查询,优先是从缓存中查询,如果没有,再从数据库里面查询。

对于既有数据库写入又有缓存操作的接口,一般分为两种情况执行。

大部分情况下,缓存理论上都是需要可以从数据库恢复出来的,所以基本上采取第一种顺序都是不会有问题的,但是无法保证数据库和缓存完全一致。

也就是说,使用缓存,就可能会出现缓存与数据库不一致的情况,只是说这种几几率的情况有多大。

针对那些必须保证数据库和缓存一致的情况,通常是不建议使用缓存的,直接从数据库查询。

2.3、问题三:什么是缓存穿透

缓存穿透,表示恶意用户频繁的模拟请求缓存中不存在的数据,此时如果有大量的接口请求,短时间内会直接落在了数据库上,缓存被击穿,导致数据库性能急剧下降,最终影响服务整体的性能。

这个在实际项目中很容易遇到,如抢购活动、秒杀活动、抢优惠券等接口 API 被大量的恶意用户刷,导致短时间内数据库宕机。对于缓存击穿的问题,有以下几种解决方案。

2.4、问题四:什么是缓存雪崩

缓存雪崩,简单的说就是在短时间内有大量缓存失效,如果这期间有大量的请求发生,同样也有可能会导致数据库发生宕机。在 Redis 机群的数据分布算法上如果使用的是传统的 hash 取模算法,在增加或者移除 Redis 节点的时候就会出现大量的缓存临时失效的情形。

对于缓存雪崩的问题,有以下几种解决方案。

2.5、问题五:redis 缓存会不会出现并发问题

首先 Redis 是单线程执行命令的,在出现多个 Redis Client 并发操作数据时,秉承先发起先执行的原则,其它的处于阻塞状态。

redis 缓存并发问题,其实主要指的还是读取数据库数据的并发操作问题。

当缓存过期后会从数据库查询数据然后再存入Redis​缓存,但是在高并发情况下,可能还没来得及将数据库中查出来的数据存入Redis​时,其它Client​又从数据库里查询数据再存入Redis了。

这样一来会造成多个请求并发的从数据库获取数据,然后存入Redis,可能在读取的时候,出现脏数据。

针对这种场景,有以下几种解决方案。

三、小结

本文主要围绕 redis 使用中出现的一些场景问题,进行一次简单的总结,如果有疏漏的地方,欢迎网友留言指出!

四、参考

1、博客园 - 卡斯特梅的雨伞- springboot中RedisTemplate的使用

来源:Java极客技术内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯