【分布式】高并发下的性能利器——缓存

俗话说得好,在计算机领域,没有什么事情是不能通过一个中间层解决的,所以我们看到,在操作系统中有Cache,网络环境中有CDN,MySQL中有缓冲池,分布式系统中有分布式缓存,真理就是如此言简意赅。

李智慧老师在《大型网站技术核心原理与案例分析》一书中也说

网站性能优化第一定律:优先考虑使用缓存优化性能。

初识缓存

定义

缓存是指将数据存储在相对较高访问速度的存储介质中

Trade-Off
TradeOff
访问速度快的特性,可以减少访问时间如果使用不当,会带来种种不良反应
保存计算后的结果,避免重复计算
缓存的设计模式
  • Cache Aside 更新模式

    这是最常见的缓存模式

    先从Cache中取,如果缓存中没有,从数据库取,成功后放入缓存

    成功更新数据库后,让缓存失效

    在这里插入图片描述在这里插入图片描述

  • Read/Write Through 更新模式

    相比于Cache Aside模式,要让应用程序维护缓存和数据库两个存储,Read/Write Through模式对于应用程序来说,只有一个存储。

    读操作时,如果缓存未命中,缓存服务自己去数据库加载数据到缓存。

    写操作时,如果缓存未命中,直接更新数据库即可,如果缓存命中,则更新缓存,再由缓存服务自己更新数据库。

  • Write Behind Caching 更新模式

    该模式的特点是,更新数据时只更新缓存,不更新数据库,缓存会异步更新数据库

缓存的使用说明书

两个前置条件
  1. 数据访问不均衡,二八原则往往奏效
  2. 数据在某个时间段内有效,不会很快过期导致賍读
缓存使用注意事项
  • 分布式架构下,要有一个外部缓存集群,要保证内存和网络带宽
  • 二八原则:要关注缓存的命中率,避免没有热点的访问
  • 频繁修改的数据不适合缓存
  • 缓存预热:避免重建缓存数据的性能损耗
  • 缓存的时间周期:太长浪费内存,太短导致数据不断从数据库加载到缓存
缓存在高并发场景下的常见问题
  • 缓存一致性问题

  • 缓存并发问题
    在这里插入图片描述

  • 缓存穿透问题

    高并发场景下,如果某一个key被高并发访问,没有被命中,出于对容错性考虑,会尝试去从后端数据库中获取,从而导致了大量请求达到数据库,而当该key对应的数据本身就是空的情况下,这就导致数据库中并发的去执行了很多不必要的查询操作,从而导致巨大冲击和压力。

    解决方式:缓存空对象;单独过滤处理

  • 缓存雪崩

    缓存雪崩就是指由于缓存的原因,导致大量请求到达后端数据库,从而导致数据库崩溃,整个系统崩溃,发生灾难。

    还有一种出现雪崩的情况,系统预加载的缓存集体失效,这种可以通过设置不同的失效时间避免

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值