
课程咨询: 400-996-5531
投诉建议: 400-111-8989
认真做教育 专心促就业
数据一致性问题在许多软件开发项目中都是需要重点关注的一个编程问题,而本文我们就通过案例分析来简单了解一下,高并发编程数据一致性如何解决。
1、先更新缓存,再更新数据库
如果同时来了两个并发写请求,执行过程是这样的:
写请求1更新缓存,设置age为1
写请求2更新缓存,设置age为2
写请求2更新数据库,设置age为2
写请求1更新数据库,设置age为1
执行结果就是,缓存里age被设置2,数据库里的age被设置成1,导致数据不一致,此方案不可行。
2、先更新数据库,再更新缓存
如果同时来了两个并发写请求,执行过程是这样的:
写请求1更新数据库,设置age为1
写请求2更新数据库,设置age为2
写请求2更新缓存,设置age为2
写请求1更新缓存,设置age为1
执行结果就是,数据库里age被设置2,缓存里的age被设置成1,导致数据不一致,此方案不可行。
3、先删除缓存,再更新数据库
如果同时来了两个并发读写请求,执行过程是这样的:
写请求删除了缓存
读请求查询缓存没数据,然后查询数据库,再把数据写到缓存中
写请求更新数据库
执行结果是,缓存中是旧数据,而数据库里是新数据,导致数据不一致,此方案不可行。
4、先更新数据库,再删除缓存
这种方案,在并发写的时候,不会出问题。因为都是先更新数据库再删除缓存,不会出现不一致的情况。
但是在并发读写的时候,还是有可能出现数据不一致。
读请求查询缓存没数据,然后查询数据库
写请求更新数据库,删除缓存
读请求回写缓存
执行结果是,缓存中是旧数据,而数据库里是新数据,导致数据不一致。
其实这种情况出现的概率很低,写缓存比写数据库快出几个量级,读写缓存都是内存操作,速度非常快。
遇到了这种极端场景,我们也需要做一下兜底方案,缓存都要设置过期时间。这种方案属于数据的弱一致性和终一致性,而不是强一致性。
【免责声明】:本内容转载于网络,转载目的在于传递信息。文章内容为作者个人意见,本平台对文中陈述、观点保持中立,不对所包含内容的准确性、可靠性与完整性提供形式地保证。请读者仅作参考。更多内容请加抖音太原达内IT培训学习了解。