# 056. 基于 nginx + lua + java 完成多级缓存架构的核心业务逻辑(三)

前面章节已经测试通了流程,但是漏掉了一个核心:没有检测 nginx 本地缓存是否有效

这里来多次访问:http://eshop-cache03/product?method=product&productId=1&shopId=1, 并观察后台打印日志信息

2019-05-07 21:37:24.009  INFO 5792 --- [nio-6002-exec-1] c.m.c.e.c.controller.CacheController     : 从 redis 中获取商品信息
2019-05-07 21:37:24.275  INFO 5792 --- [nio-6002-exec-3] c.m.c.e.c.controller.CacheController     : 从 redis 中获取店铺信息
1
2

第一次访问的时候,nginx 本地缓存没有,会去 redis 中获取,后面多次访问的时候, 就会走 nginx 本地缓存了,过期时间设置的是 10 分钟

来回顾下流程:

  1. 缓存数据生产

    有数据变更则主动更新两级缓存(ehcache + redis)

    通过缓存维度化拆分,来达到细粒度和小影响更新缓存

  2. 分发层 ngix + 应用层 nginx

    自定义流量分发策略,提高缓存命中

    nginx shared dice 缓存 -> redis 和 ehcache,

    渲染 htm 模板并返回客户端

但是还差一个关键的要点,当前面的三级缓存失效(nginx、redis、ehcache)时, 就需要缓存服务重新拉取数据,去更新到 redis 和 ehcache 中。

这个关键点涉及到分布式缓存重建并发冲突问题