1.【多级缓存架构】多级缓存架构以及每一层的意义
文章目录
1. 多级缓存架构
nginx本地缓存 + redis分布式缓存 + tomcat堆缓存 构成多级缓存架构
2. 缓存数据分类
2.1 时效性高的数据,比如:库存
- 特点:时效性高,随着商品的不断交易,库存会不断变化,当库存数据发生变化时,我们希望更快的将最新的库存数据显示到页面上去,而不是说等了很长时间,库存才反应到页面上去。
- 方式:采用【数据库和redis双写】的方案,可以保证缓存的最大时效性。
2.2 失效性不高的数据,比如:商品颜色,版本,规格参数等等
-
特点:时效性不高,当数据发生变更,数据可以隔一段时间反应到页面上去。
-
方式:采用MQ异步通知的方式,开发一个数据生产服务,监听MQ消息,然后异步拉取服务数据,更新 tomcat jvm缓存 + redis缓存。
2.3 案例:nginx + lua脚本做页面动态生成的工作,
-
每次请求过来,优先从nginx本地缓存提取各种数据,结合页面模板,生成需要的页面;
-
如果nginx本地缓存过期,那么就从nginx到redis中去拉取数据,然后更新nginx本地缓存。
-
如果redis中的数据也被LRU算法清理掉了,那么就从nginx走http请求接口到后端服务中拉取数据,数据生成服务中,先在本地tomcat里的jvm堆栈内存中找,ehcache;
-
如果jvm堆栈内存中的数据也被LRU清理掉了,那么就从新发送请求到源头服务中去拉取数据,然后再次更新tomcat堆内存缓存 + redis缓存,并返回数据给nginx,nginx缓存到本地。
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住的最后那少量的部分缓存。
参考石衫老师亿级流量笔记
如果对你有用,点个赞再走呗!!!