博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
三分钟掌握数据库缓存双写一致性
阅读量:2400 次
发布时间:2019-05-10

本文共 658 字,大约阅读时间需要 2 分钟。

更新数据库后如果保证缓存与数据库的一致性

数据库为修改,而缓存可以修改也可以删除,因此延伸出4种方案

 

1.先改库,再改缓存

场景如下:

1.A改库

2.B改库

3.B改缓存

4.A改缓存

得到的结果为 A的缓存,B的库,故存在不同步场景

 

2.先改缓存,再改库

场景如下:

1.A改缓存

2.B改缓存

3.B改库

4.A改库

得到的结果为 A的库,B的缓存,故存在不同步场景

 

3.先删缓存,再改库

场景如下:

1.A删缓存

2.B查缓存无值,故查数据库得到旧值

3.B将旧值设回缓存

4.A改库

得到的结果为 A的库,旧值缓存,故存在不同步场景

 

4.先改库,再删缓存

场景如下:

1.无缓存或缓存刚好过期

2.A查库得到旧值

3.B改库

4.B改缓存

5.A将旧值设回缓存

得到的结果为 B的库,旧值缓存,故存在不同步场景

但该场景出现的概率较低,因为需要在A查库结束到设缓存的时间内,B要完成改库+改缓存,而改库的时间一般会远大于设缓存的耗时。

 

如何同步

上面列的4种方案理论上都有概率出现不同步的场景,那要如何保证数据库与缓存的一致性呢?

答案是双删法。

在上述  3.先删缓存,再改库和与 4.先改库,再删缓存 的基础上,延伸出

5.先删缓存,再改库,延迟N秒后,再删缓存

6.先删缓存,再改库,延迟N秒后,再删缓存

 

N需根据业务时间及系统对不同步的容忍度设置

但如果延迟N秒后的删缓存失败,依旧会有小概率出现不同步场景。

如果系统对不同步场景的容忍度很低,那么此时就需要借助mq等中间件来保证该次删除一定成功了。

 

 

转载地址:http://uriob.baihongyu.com/

你可能感兴趣的文章
MySQL RR隔离级别的更新冲突策略
查看>>
MySQL索引条件下推的简单测试
查看>>
通过SQL解读财富的分配(二)
查看>>
一个MySQL死锁问题的复现
查看>>
数据迁移中的几个问题总结
查看>>
心理学中的效应简单解读(r12笔记第24天)
查看>>
mysqldump简单解析
查看>>
Oracle备库无法连接主库的问题分析
查看>>
最近一周的学习计划
查看>>
MySQL备份和恢复工具图谱
查看>>
从零开始搭建Nginx和Tomcat的web集群环境
查看>>
关于技术文档
查看>>
alert日志中的一条ora警告信息的分析
查看>>
美国旧金山之行第四天
查看>>
zookeeper初探
查看>>
mysqldump与innobackupex备份过程你知多少(完结篇)
查看>>
sysbench花式踩坑之三:自增值导致的锁等待
查看>>
当心!使用mysqldump备份可能会让你欲哭无泪
查看>>
oracle 12c flex cluster专题 之 节点角色转换
查看>>
SQL优化案例-改变那些CBO无能为力的执行计划(一)
查看>>