业务层面缓存穿透的解决方案

网上有一些关于缓存穿透和缓存雪崩的解决方案,无非是:

      1.如果查询数据为null,则把null进行缓存

      2.使用布隆过滤器

 

先来说说缓存穿透的概念:我们在项目中使用缓存通常都是APP先检查缓存中是否存在,如果存在直接返回缓存内容,如果不存在就直接查询数据库然后再缓存查询结果返回。这个时候如果我们查询的某一个数据在缓存中一直不存在,就会造成每一次请求都查询DB,这样缓存就失去了意义,在流量大时,可能DB就挂掉了。

 

再来讲讲我们的业务场景:

      1.通常我们是首页,或是统计页,用户请求较多,首页进入系统必定会加载,统计页(针对一些准实时的统计结果)查询的SQL或是结果比较复杂。

      2.时效性一般,基本上小时级别

      3.数据量较大,一般是亿级或是千万级别

      4.业务逻辑比较复杂,可能需要进行各种表的关联

      5.如果请求过多,有可能数据库奔溃,即使在进行分库分表之后还是有可能占用一大部分的数据库IO和CPU资源

      6.统计的维度较多,每个用户请求的维度可能是不一样的。

      针对上述情况我们一般的做法,就是加一层缓存,请求过来先去访问缓存,可以使用memcached或是redis,如果缓存不存在或是缓存失效的情况下,再去load DB。大部分的情况下,这是非常好的,但是某一天如果你需要重启缓存,或是缓存在某一时刻失效很大一部分,这就会导致我们之前所说的缓存穿透。

     ok,来说下我们在缓存穿透的优化吧:先来看个架构图,在来解释

      

 

    1.更具业务统计的维度或是场景,建立一张以JSON格式为模板的表

    2.通过调度平台,定时的把任务统计完成并保存至模板表中和缓存集群中

    3.不断对2进行轮询,保持数据的热度

    4.用户请求过来,先访问我们的缓存,一旦缓存失效或是重启,直接从数据库模板表中获取最新的热度数据并缓存,这样我们就能有效的减轻数据库的压力。

    5.这也是一种缓存预热的方案

 技术交流:534368042

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值