基于Nginx+Redis+jvm堆缓存的多级缓存架构设计

一、多级缓存架构nginx

采用三级缓存:nginx本地缓存+redis分布式缓存+tomcat堆缓存的多级缓存架构

2.缓存中的数据分为两种redis

(1).时效性要求很是高的数据:库存、价格等 通常来讲,显示的库存,都是时效性要求会相对高一些,由于随着商品的不断的交易,库存会不断的变化。固然,咱们就但愿当库存变化的时候,尽量更快将库存显示到页面上去,而不是说等了很长时间,库存才反应到页面上去 (2).时效性要求不高的数据:商品的基本信息(名称、颜色、版本、规格参数,等等) 时效性要求不高的数据,就还好,好比说你如今改变了商品的名称,稍微晚个几分钟反应到商品页面上,也还能接受 商品价格/库存等时效性要求高的数据,采起相关的服务系统每次发生了变动的时候,直接采起数据库和redis缓存双写的方案,这样缓存的时效性最高 商品基本信息等时效性不高的数据,来自多种不一样的系统,采起MQ异步通知的方式,写一个数据生产服务,监听MQ消息,而后异步拉取服务的数据,更新tomcat jvm缓存+redis缓存 

3.多级缓存架构的工做流程算法

每次请求过来,优先从nginx本地缓存中提取各类数据(这里nginx+lua脚本作页面动态生成的工做),结合页面模板,生成须要的页面
若是nginx本地缓存过时了,那么就从nginx到redis中去拉取数据,更新到nginx本地
若是redis中也被LRU算法清理掉了,那么就从nginx走http接口到后端的数据生产服务中拉取数据,在数据生产服务中先在本地tomcat里的jvm堆缓存中找,好比ehcache中,若是ehcache中的数据也被LRU清理掉了,那么就从新发送请求数据库拉取数据,而后再次更新tomcat堆内存缓存+redis缓存,并返回数据给nginx,而且nginx将数据缓存到本地 

4.多级缓存架构中每一层的意义数据库

nginx本地缓存,主要是针对热数据的高并发访问,通常来讲,商品的购买老是有热点的,好比天天购买iphone、小米等知名品牌的东西的人老是比较多的,这些热数据因为常常被访问,因此能够被锁定在nginx的本地缓存内,那么对这些热数据的大量访问,就直接走nginx就能够了,不须要走后续的各类网络开销了 redis分布式大规模缓存,主要是针对大规模的离散访问,它提供海量的数据支撑、高并发的访问、高可用的服务,因为redis缓存最大量的数据,最完整的数据,所以为数据库提供了一层强有力的保护伞 nginx本地内存有限,也就能缓存部分的热数据,除了各类iphone、小米等热数据,其余相对不那么热的数据,流量会常常走到redis那里 jvm堆内存缓存,主要是针对redis大规模灾难的,若是redis出现了大规模的宕机,致使nginx大量流量直接涌入数据生产服务,那么最后的tomcat堆内存缓存至少能够再扛一下,不至于让数据库直接裸奔形成雪崩效应 
相关文章
相关标签/搜索