多级缓存架构

1. 多级缓存架构

nginx本地缓存 + redis分布式缓存+ tomcat堆缓存 构成多级缓存架构

2. 缓存数据分类

2.1 时效性高的数据,比如:库存

  • 特点:时效性高,随着商品的不断交易,库存会不断变化,当库存数据发生变化时,我们希望更快的将最新的库存数据显示到页面上去,而不是说等了很长时间,库存才反应到页面上去。

  • 方式:采用【数据库和redis双写】的方案,可以保证缓存的最大时效性

2.2 失效性不高的数据,比如:商品颜色,版本,规格参数等等

  • 特点:时效性不高,当数据发生变更,数据可以隔一段时间反应到页面上去

  • 方式:采用MQ异步通知的方式,开发一个数据生产服务,监听MQ消息,然后异步拉取服务数据,更新 tomcat jvm缓存 + redis缓存

2.3 案例:nginx + lua脚本做页面动态生成的工作,

1、每次请求过来,优先从nginx本地缓存提取各种数据,结合页面模板,生成需要的页面;

2、如果nginx本地缓存过期,那么就从nginx到redis中去拉取数据,然后更新nginx本地缓存。

3、如果redis中的数据也被LRU算法清理掉了,那么就从nginx走http请求接口到后端服务中拉取数据,数据生成服务中,先在本地tomcat里的jvm堆栈内存中找,ehcache;

4、如果jvm堆栈内存中的数据也被LRU清理掉了,那么就从新发送请求到源头服务中去拉取数据,然后再次更新tomcat堆内存缓存 + redis缓存,并返回数据给nginx,nginx缓存到本地。

多级缓存架构_第1张图片

3. 多级缓存架构中每一层的意义

3.1 nginx本地缓存

抗的是热数据高并发访问,经常会被访问的那些数据,就会被保留到nginx本地缓存中。对于那些热数据的大量访问,直接走nginx就可以了。
nginx本地内存有限,只能用于抗部分热数据,其他相对不那么热的数据会走redis。

3.2 redis分布式大规模缓存

抗的是很高的离散访问支撑海量的数据,高并发的访问,高可用的服务
redis缓存最大量的数据,最完整的数据和缓存,1T+数据;支撑高并发的访问,QPS最高的几十万;可用性非常好,能提供非常好的服务。
redis cluster的多master写入,横向扩容,1T+以上的海量数据支撑,几十万的数据读写QPS,99.99%的高可用性,可以有效的抗住大量的离散请求。

3.3 tomcat jvm 对内存缓存

主要是抗redis大规模灾难的,如果redis出现了大规模的宕机,导致nginx大量流失直接涌入数据生产服务,那么最后tomcat堆内存缓存至少可以再抗一下,不至于请求直接跑到数据库,导致数据压力倍增。 tomcat jvm堆内存缓存,也可以抗住redis没有cache住的最后那少量的部分缓存。

你可能感兴趣的:(java)