目录
① 多级缓存使用场景
② 多级缓存读写逻辑
③缓存预热
④ 总结
1 多级缓存使用场景
多级缓存适合用在对数据实时性不敏感的场景,比如商家修改了商品名称 商品描述,晚显示几分钟用户也不感知,对业务也没有影响
再比如新闻页面,修改了几个错别字,晚几分钟显示也没有什么大不了啊
下面我们还是用商品详情页这个场景来描述多级缓存的使用
有关商品详情的架构演化在另一篇文章做了讲解
这一篇我们重点讲一下多级缓存的设计
2 多级缓存的读写逻辑
闲话少说,先上图,缓存部分已经用彩色文字标识
分别解释下,每级缓存的作用
1 nginx本地缓存
其特点是直接内存返回,速度极快 10毫秒内,
但单机内存有限,主要作为热点商品缓存,分担redis压力
2 redis集群缓存
其特点是无限扩容,高可用,访问速度速度也很快 几十毫秒
作为缓存的主要存储,商品详情的信息基本都保存在这里了
3 jvm 缓存
最要作用是保护数据库,防止在redis集群崩溃后 打死数据库
相信看了架构图 对数据的读取逻辑应该有了大概的了解
我们再来分析一遍
1 首先用户请求进入nginx 检查本地有无缓存,如果有 就直接返回
2 如果没有则查询redis缓存
3 如果命中redis缓存,返回并渲染后返回html
4 如果没命中redis缓存,直接调用‘‘商品详情页worker’’接口,商品详情页worker直接调用 ‘‘商品服务’’ ‘‘商家服务’’ ‘‘XX服务’’ 等依赖服务 生成数据写入redis 并返回(这一波操作可以说是相当直接 )
3 缓存预热
对于高并发系统,可能一上线就会有海量请求涌入
如果缓存没有预热,很有可能直接导致数据库压力过大,甚至打死的情况
这时候就要对缓存进行预热,但是这么多的商品到底选择那些进行预热呢?
可以采用实时计算来统计,计算出最近访问量频繁的商品,并记录
如下图
右侧流程为实时计算架构
nginx讲日志发送给kafka
实时计算系统从kafka获取数据并实时分析,如果是热点商品就定期写入redis
热点商品数据可采用LUR算法来计算 请参考大白话聊缓存之LRU算法
4 总结
还是强调下场景,多级缓存架构,用于可容忍短时间内数据不一致的场景
如果是强一致性场景,又想读高性能,请参考大白话聊缓存之读写一致性
后续我们将分享
‘‘超超超级热数据‘’的读并发解决方案
高并发写入的解决方案
敬请期待!
欢迎关注 公众号
网友评论