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

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

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

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

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

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

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

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

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

相关推荐
重生之后端学习10 小时前
78. 子集
java·数据结构·算法·职场和发展·深度优先
iAkuya12 小时前
(leetcode)力扣100 73柱状图中最大的矩形(单调栈)
算法·leetcode·职场和发展
Rick199312 小时前
如何保证数据库和Redis缓存一致性
数据库·redis·缓存
重生之后端学习14 小时前
46. 全排列
数据结构·算法·职场和发展·深度优先·图论
逆境不可逃16 小时前
LeetCode 热题 100 之 76.最小覆盖子串
java·算法·leetcode·职场和发展·滑动窗口
NEXT0616 小时前
普通函数与箭头函数的区别
前端·javascript·面试
NEXT0616 小时前
CommonJS 与 ES Modules的区别
前端·面试·node.js
追随者永远是胜利者19 小时前
(LeetCode-Hot100)647. 回文子串
java·算法·leetcode·职场和发展·go
zheshiyangyang19 小时前
前端面试基础知识整理【Day-8】
前端·面试·职场和发展
追随者永远是胜利者20 小时前
(LeetCode-Hot100)461. 汉明距离
java·算法·leetcode·职场和发展·go