大型系统中缓存的使用

转载自大型系统中缓存的使用

一、前言

在处理高并发请求时,缓存几乎是无往不利的利器。举个例子,在下图中有两个请求:请求1命中缓存,总耗时= 网络耗时t1 + 缓存数据获取t2,请求2总耗时 = 网络耗时 t1 + 缓存数据获取t3。t3-t2就是缓存带来的性能提升。实际业务场景中,查询一次DB需要耗时20ms,读取一次缓存耗时1ms,那么就节省了19ms。

Java性能优化指南—缓存那些事

从实际的场景出发,可以将缓存的使用分为两大类:

  1. 使用更快的存储介质替代慢的,减少数据访问时间,比如内存替代磁盘
  2. 缓存计算结果,节省计算资源,比如缓存DB查询结果
  3. 就近访问,常见的如CDN。将数据存储到多个CDN中,选择距离最近的CDN访问数据

对于第一类使用方式,可能不是特别直观,我们看下数据
在这里插入图片描述

从上图可以看到,最快的一级缓存到最慢的网络读写之间差了3亿倍

第二类比较好理解,从开篇举的例子就能看出,计算消耗的资源越多,缓存的效果就越明显。
通常这两类使用方式结合,能达到优化响应,节省计算资源,降低后端负载的目的。但是有利就有弊,相对于他的巨大好处,带来的弊端也是巨大的,甚至某些场景并不适合缓存。

  1. 数据不一致性。无论多么好的设计,缓存数据与真实数据源一定存在着一定时间窗口,这段时间内数据是不一致的
  2. 代码维护成本。有缓存后,代码就会在原数据源基础上加入缓存的相关代码,例如某数据存储在DB中,通过sql进行查询,现在需要同步设计一套缓存的存储、同步、使用的代码。必然增加代码工作量和系统架构的复杂度

在大型分布式系统中,缓存是不可或缺的,那么使用它要注意些什么呢?

请看大型系统中缓存的使用

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值