码迷,mamicode.com
首页 > 数据库 > 详细

如何保证缓存与数据库的双写一致性

时间:2019-08-03 14:35:32      阅读:119      评论:0      收藏:0      [点我收藏+]

标签:成功   更新   删除   读取   nbsp   数据   而不是   内存   设置   

一、涉及到的操作

缓存:读、写、更新、删除,这些操作可能失败

数据库:读、写、更新、删除,这些操作可能失败

 

二、正常流程

1. 读数据,先读缓存,命中返回数据;未命中读数据库,返回数据,写缓存;读数据不存在不一致问题

2. 写数据库,对缓存不做处理

3. 更新数据库数据,如果数据不在缓存中,不作处理;如果数据在缓存中,删除而不是更新缓存

a. 有些缓存中的数据,是经过处理后的数据,如果更新会消耗计算资源

b. 如果频繁更新,却没有读取,就会浪费计算时间和内存空间

4. 删除数据库数据,如果数据不在缓存中,不作处理;如果数据在缓存中,删除缓存

 

三、初级的数据不一致问题

更新数据库数据的时候,如果更新数据库数据成功,删除缓存数据失败,则数据不一致

 

四、解决方法:更新数据库数据时,先删除缓存,可以保证一致性

a. 如果删除缓存失败,则更新失败

b. 如果删除缓存成功,但是更新数据库失败,则缓存中没有数据,数据库是旧数据

 

五、复杂的数据不一致的问题

在删除缓存后,更新数据库还未成功,此时有请求读取数据库旧数据,并把旧数据写入了缓存,然后更新数据库成功

 

六、解决方法

设置缓存过期时间,保证最终数据一致性

 

如何保证缓存与数据库的双写一致性

标签:成功   更新   删除   读取   nbsp   数据   而不是   内存   设置   

原文地址:https://www.cnblogs.com/june0816/p/6140626.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!