分布式系统关注点(17)——先写DB还是「缓存」?
如果第二次看到我的文章, 欢迎右侧扫码订阅我哟~ 👉 本文长度为 4209字 ,建议阅读 12 分钟。 坚持原创,每一篇都是用心之作~ 在前一篇《 360°全方位解读「缓存」 》中,我们聊了运用缓存的三种思路,以及在一个完整的系统中可以设立缓存的几个位置,并且分享了关于浏览器缓存、CDN缓存、网关(代理)缓存的一些使用经验。 这次Z哥将深入到实际场景中,来看一下「进程内缓存」、「进程外缓存」运用时的一些最佳实践。由于篇幅原因,这次先聊三个问题。 首当其冲的就是“先写DB还是缓存?”。我想,只要你开始运用缓存,这会是你第一个要好好思考的问题,否则在前方等待你的就是灾难。。。 先写DB还是缓存? 一个程序可以没有缓存,但是一定要有数据库。这是大家的普遍观点,所以数据库的重要性在你的潜意识里总是被放在了第一位。 先DB再缓存 如果不细想的话你可能会觉得,数据库操作失败了,自然缓存也不用操作了;数据库操作成功了,再操作缓存,没毛病。 但是数据库操作成功,缓存操作的失败的情况该怎么解?( 主要在用到redis,memcached这种进程外缓存的时候,由于网络因素,失败的可能性大增 ) 办法也是有的,在操作数据库的时候带一个事务,如果缓存操作失败则事务回滚。大致的代码意思如下: begin trans var isDbSuccess = write db; if (isDbSuccess){