先写数据库还是先写缓存

关于维护一份数据是先写数据库,还是先写缓存的问题,很多朋友发表了自己的看法,本文来谈谈我的看法。我的结论非常清晰明确:先写数据库再写缓存。核心思想是数据库和缓存之间追求最终一致性,不追求强一致性。

(1) 在缓存作为提升系统性能手段的背景下,不需要保证数据库和缓存的强一致性。如果非要保证二者的强一致性,会增大系统的复杂度,完全没有必要

(2) 如果更新数据库成功,再更新缓存。此时存在两种情况:更新缓存成功则万事大吉。更新缓存失败,没有关系,等待缓存失效,此处要合理设置失效时间

(3) 如果更新数据库失败,则操作失败,重试或者等待用户重新发起

(4) 数据库是持久化数据,是操作成功还是失败的判断依据。缓存是提升性能的手段,允许短时间和数据库的不一致

(5) 在互联网架构中,很少追求强一致性,一般都是追求最终一致性

如果非要保证缓存和数据库的一致性,本质上是在解决分布式一致性问题。

分布式一致性问题解决方案有很多,可以选择比如两阶段提交,TCC,本地消息表,MQ事务性消息等方案。

你可能感兴趣的:(【架构】架构设计,数据库,缓存)