前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >面试官问我:什么是缓存击穿,该怎么解决?

面试官问我:什么是缓存击穿,该怎么解决?

作者头像
喵叔
发布2022-05-06 18:28:51
3050
发布2022-05-06 18:28:51
举报
文章被收录于专栏:喵叔's 专栏

这个问题来自于粉丝面试的时候遇到的,下面我来讲解一下。

什么是缓存击穿

对于这个问题,简单的说就是把缓存透了但数据库没透。还不明白?那么这一小节我来带大家通过一个形象的例子来讲解一下。 我们知道缓存层都会设置数据过期时间,如果不设置过期时间的话,随着查询的越来越多缓存就会越来越大,内存撑不住了服务器就炸了。但是我们设置了过期时间真的就万无一失了吗?假设数据已经到期了,那么缓存就查不到了,这时只能去数据库查。如果同一时间巨多的人发送的查询请求都是要求查这个数据。因为缓存过期了,所以这个巨多的查询都直接转向数据库去查询了,呵呵🙂,我们的数据库大哥已经大半个身子埋土里了,这种情况叫缓存击穿。如果要查询的数据要跨表查询甚至跨库查询的话,面对这么大的查询请求,数据库大哥就直接见阎罗王了,这种情况叫数据缓存穿透。

如何解决

这很好办,我们可以从两个方向思考。目前我们可以使用的工具是数据库和缓存。

从数据库角度思考

我们可以直接把流量变成原来的一百分之一甚至是十分之一,这样数据库就能轻松可以处理查询请求了。 我们需要加锁,之前不管多少数据都可以同时读,但是现在来个锁,线程要读取数据时先查询数据有没有上锁,如果上锁了那就等着,如果没上锁那就获取锁后再请求数据库。这样数据库压力瞬间就降低了。但是这样做用户体验会很差,因为数据加锁了后面的请求都要等待,如果查询很慢的话用户可以明显感受到卡顿。但是没办法,因为这个方法的出发点就是牺牲用户体验,保证数据库不挂掉。

从缓存角度思考

我们来想想为啥什么出现缓存击穿的问题,是因为缓存数据过期了,没了。那么我们可以对缓存动刀解决这个问题。 修改缓存数据的过期策略,最常见的是设置热点数据永不过期。但是这个方法在很多情况下,我们无法预知哪些时热点数据。例如某明星官宣配偶前,微博的程序员们在初始化缓存的时候不可能直接把它归为热点数据。那该怎么办呢?当然还得从数据过期策略层面出发,我们可以做这样的逻辑:如果发现这个数据快过期了,并且最近这个数据访问特别多,那么后台就可以启动一个异步线程,重新在缓存层中添加这个数据的缓存,给这个数据续续命。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-12-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

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

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

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