前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【吊打面试,击中要害】缓存穿透、缓存击穿和缓存雪崩

【吊打面试,击中要害】缓存穿透、缓存击穿和缓存雪崩

作者头像
BUG弄潮儿
发布2020-06-12 16:56:41
3170
发布2020-06-12 16:56:41
举报
文章被收录于专栏:JAVA乐园JAVA乐园

阅读文本大概需要3分钟。

2019磕磕碰碰总算过去了,2020年秉承开源共享原则,继续分享在工作中遇到的各种问题和干货。2020年在面试题开始,祝愿小伙伴在2020年都能谋到一份好差事。

0x01:缓存穿透

在高并发情况下,查询一个数据库和缓存都不存在的值时;如果缓存服务不对这个不存在的值进行缓存,导致缓存不会被命中,而大量请求直接落到数据库上。这种情况就叫缓存击穿。这种情况就是缓存和数据库都没有响应的值。

解决方案:

  • 缓存的key要按一定规则生成,然后集中拦截所有请求缓存的Key,如果请求的Key不满足既定的生成规则,就拒绝访问。
  • 对于NULL值,也直接缓存,但是缓存NULL的时间不能太长,否则NULL数据长时间得不到更新,也不能太短,否则达不到防止缓存击穿的效果

0x02:缓存击穿

在高并发情况下,对一个特定的值进行查询,但是这个时候缓存正好过期了,缓存没有命中,而导致大量请求直接访问数据库,如活动系统里面查询活动信息。这种情况就是缓存没有对应的值,数据库有对应的值。

解决方案:

  • 设置热点Key对应的数据永远不过期
  • 读取数据库数据进行缓存时,增加互斥锁

0x03:缓存雪崩

在高并发情况下,大量的缓存key在同一时间一起失效,导致大量的请求在缓存中获取不到数据,而直接访问数据库。

解决方案:

  • 尽量设置Key失效时间点均匀分布,即不同的Key设置不同的过期时间
  • 如果缓存数据库采用的是分布式部署,将热点数据均匀分布在不同的缓存数据库中
  • 设置热点数据永远不过期

一句话缓存穿透、缓存击穿和缓存雪崩都是缓存失效导致大量请求直接访问数据库而出现的情况。不同的是缓存穿透是数据库和缓存都不存在相关数据;而缓存击穿和缓存雪崩是缓存和数据库都存在相应数据,只是缓存失效了而已。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-01-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 BUG弄潮儿 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档