面试—如何介绍项目中的多级缓存?

项目中使用的多级缓存也就是 分布式缓存 Redis + 本地缓存 Caffeine,那么令 Caffeine 作为一级缓存,Redis 作为二级缓存,在项目中通过记录数据的访问次数,将热点数据放在 本地缓存,将非热点数据放在 Redis缓存 中,访问流程如下:

使用多级缓存的好处在于 Redis 单机每秒可以接收 10w 次的请求,本地缓存比 Redis 缓存可以抗更高数量级的并发,本地缓存可以每秒接收百万的请求,使用两级缓存极大增加访问效率

但是使用多级缓存之后,存在数据一致性问题

  • Redis 缓存和 MySQL 数据不一致:可以使用 延时双删 来保证数据的一致性,如果需要更准确的数据一致性,可以使用 Canal 来监听 MySQL 的 binlog 日志来保证数据的一致性

  • 在分布式环境下,多台应用之间本地缓存以及和 MySQL 之间的数据不一致:可以通过 MQ 来保证数据一致性

    当应用 1 收到请求更新数据库,同时应用 1 更新本地缓存,并且发送更新 MQ 广播消息,让其他的应用也更新本地缓存

如何对热点数据进行存储?

其实就是将数据的访问次数记录起来,当发现访问量非常大,在本地记录一下,可以使用 HashMap 进行存储,记录一下热点数据,再通知所有的服务将热点数据放入到本地缓存中来

相关推荐
嘻嘻哈哈樱桃28 分钟前
数据流中的中位数 力扣--160
算法·leetcode·职场和发展
M ? A29 分钟前
你的 Vue v-for,VuReact 会编译成什么样的 React 代码?
前端·javascript·vue.js·经验分享·react.js·面试·vureact
2501_9336707933 分钟前
大厂HR内部爆料:2026年招聘资深员工,拥有这些证书的简历优先进入面试池!
面试·职场和发展
逻辑驱动的ken34 分钟前
Java高频面试场景题07
java·开发语言·面试·职场和发展·求职招聘·春招
callJJ41 分钟前
JVM 内存区域划分详解——从生活比喻到运行时数据区全景图
java·jvm·面试·内存区域划分
邪修king43 分钟前
C++ vector 超全攻略:核心知识点、STL 生态联系与避坑指南
c语言·c++·面试
人道领域1 小时前
【LeetCode刷题日记】:344,541-字符串反转字符串反转技巧:双指针原地交换法
算法·leetcode·面试
Raink老师3 小时前
用100道题拿下你的算法面试(矩阵篇-2):求转置矩阵
算法·面试·矩阵
我叫黑大帅9 小时前
通过eino-ext如何正常indexer RAG?
后端·面试·go
ego.iblacat11 小时前
Redis 核心概念与部署
数据库·redis·缓存