提到多级缓存,很多人都想到通过Guava本地缓存与Redis分布式缓存结果,但实际上缓存结果远不止这两层。在一些场景中,可以有很多层。
以一个购物网站为例,从前到后,可以涉及到5级缓存。
5级缓存结构简图
客户端缓存:离用户最近的缓存,例如用电脑浏览网站,浏览器中的cookie,手机微信APP中的表情包,都是存储在用户自身电脑与手机中的。
CDN缓存:内容分发网络,是全球范围内离用户近的地方部署的用于存储网页、图片、视频等静态资源的一些边缘节点。例如,一个西藏用户浏览淘宝,淘宝的服务器假如部署在上海,那么数据从上海传输到西藏,流量存在浪费用户体验也不好,这时就可以提前将商品的图片,视频等静态资源部署在成都,大大缩短了流量成本,缩短用户体验。
NGINX缓存:WEB服务器缓存,nginx除了做负载均衡外,还可以做一些上述客户端和CDN无法做到的缓存。像网络购物中风控系统会基于用户IP甄别是否为黄牛,那么就可以把这些IP地址放到nginx黑名单中,用于过滤。
本地缓存:是单台应用服务器维度的缓存,会占用服务器本身存储空间与算力。假设一个分布式系统有5台应用服务器,那么这5台服务器中的缓存内容是独立且相同的,彼此不相互影响。本地缓存更多的是用来频繁地读,而非写。
分布式缓存:一种专门做存储的系统(单台服务器或集群)如Redis。只要向其存储一份数据,那么接入该分布式缓存的所有应用服务器可以获取到相同的内容,保证了数据的一致性。举个例子,淘宝商品库存可以放到Redis中,用户在服务器A下了一单库存减少为99同步更新到Redis,其他用户在服务器B看到的库存也会变成99。
扩展问题:
- 如果要设计一个秒杀系统,你会从哪些方面考虑缓存?
- 除了上述缓存外,还会有其他层级的缓存吗?
本文暂时没有评论,来添加一个吧(●'◡'●)