多级缓存
- 适用时效性低的商品数据
- 商品服务发生信息变更,发送消息到kafka消息队列
- 缓存服务监听到消息变更,更新Redis缓存、ehcache缓存
缓存重建并发冲突
- nginx缓存不存在是,通过hash路由到缓存服务A,此时缓存服务A缓存也不存在,则去数据库查询数据,更新Redis缓存
- 商品服务同时发生信息变更,通过kafka消息路由到缓存服务B,缓存服务B也去更新Redis缓存
- 针对同一商品,若缓存服务B先更新Redis,缓存服务A后更新Redis,缓存里的商品数据不是最新,且与数据库不一致
优化方案
zookeeper分布式锁,更新Redis前,获取zk锁,判断Redis里存储的商品数据时间版本是新还是旧,旧的话,更新Redis缓存,释放锁