缓存一致性设计方案

缓存一致性设计方案
要保证缓存和DB数据一致,即在发生写操作时要清理缓存,这两个操作要是原子性的。
完整的方案一共需要四次删除。
我们的方案是将变更事件消息发送到msgbroker中,然后自己去订阅进行缓存清除。但是msgbroker是异步的,中间存在时间差,用户很容易访问到旧的数据。所以我们的优化方案是对缓存进行二次清理。第一次是在写操作后进行同步删除,同时忽略异常,保证强一致性。第二次则是保证最终一致,通过消息中间件订阅消息异步删除,这里会处理异常,发生异常重试。
注意:不在第一次jvm删除时直接处理异常的原因是为了保证用户操作的体验,防止出现失败或者延迟过大的情况。

在高并发情况下写操作delete,读操作put存在天然的bug,且无法消除。即在A读取旧数据后,put缓存的操作在B更新DB且删除缓存之后才发生,缓存里存放了旧数据。所以我们在msgbroker删除后延迟2秒再次删除,可以很大程度上缓解这种bug造成的并发问题。这种方式降低了缓存的命中率,对于花呗这种业务模式对于缓存脏数据的零容忍,我只有这样牺牲一些可用性来保证一致性。
图片说明
还有花呗大促的时候,流量会在不同的LDC之间互相切换,导致不同的缓存数据这时候就需要借助ADDP进行全zone的删除。

发布过程中也存在缓存一致性问题
图片说明

全部评论

相关推荐

2025-12-28 16:32
重庆邮电大学 Java
程序员花海:1.技能放最后,来面试默认你都会,技能没啥用 2.实习写的看起来没啥含金量,多读读部门文档,包装下 接LLM这个没含金量 也不要用重构这种 不会给实习生做的 3.抽奖这个还是Demo项目,实际在公司里面要考虑策略,满减,触发点,触发规则 库存 之类的,不是这个项目这么简单 4.教育背景提前,格式为 教育背景 实习 项目 技能 自我评价
简历被挂麻了,求建议
点赞 评论 收藏
分享
2025-12-15 12:50
河北工程大学
sta666:我也是这个国际商业化的,三天,一天一面,就通过了,不过我是后端实习生,好好面感觉能过。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务