高并发场景中DB和Cache的一致性新的方案感想

18 篇文章 0 订阅
6 篇文章 0 订阅
文章探讨了在高并发场景中如何通过先更新缓存再更新数据库的方式保证一致性,强调了删除缓存的性能优势。提出了双写策略结合消息队列确保数据准确性的解决方案,并讨论了其在不同写读模式下的适用性。
摘要由CSDN通过智能技术生成

拜读了: 美团2面:如何保障 MySQL 和 Redis 数据一致性?这样答,虐爆面试官这篇文章后的感想


上述文章中认为:删除缓存比更新缓存拥有更好的性能,这个观点我是赞成的,毕竟从复杂度的角度来考虑,如果考虑更新操作,就需要考虑高并发环境下的更新顺序(谁的值是新的,谁的值是旧的),相比而言,不管是谁来都删除cache中的数据是更为高效和经济的。

在看完之后,我突发奇想地提出以下的一种双写的方案,欢迎大家讨论点评:

1,先更新缓存,再更新数据库

在这里插入图片描述

1.1,前提

文中末尾也提到CAP原理,AP和CP就是水火不容,高并发的场景中是不可能放弃AP的,所以需要我们从CP的角度去考虑能否降低数据一致性带来的影响。文中的延迟双删策略是个不错的手段,但是第二次删除的可靠性并不能完全得到保证,所以引入了消息队列(MQ)机制,通过使用消息队列的可重试,可确认已经高可用的特点,完成写入DB后对Cache的完整删除,以降低脏数据的风险。

1.2,理由

1.2.1,写多读少

在这种场景下,频繁的更新缓存虽然会对缓存造成一定的压力,但是考虑到数据库的IO瓶颈,从效率上来讲更新Cache也会比更新DB的效率高很多;

1.2.2,写少读多

在这种场景下,就更可以稍微忽略对Cache的写压力了;

1.2.3,写多读多【重点】

在这种场景下:

  1. 首先可以将双写分开,保证了单一职责原则;
  2. 其次,因为这种方案是先写Cache,所以读多的场合,读到的永远是最新的数据,后期使用MQ消息队列机制也能高性能的保证写入DB的及时和准确性;
  3. 再者,写多的场合下,优先写Cache会比写DB有更好的性能,缓存中写入新数据的及时也能降低读到脏数据的风险。

考虑不周,只是片面之词,欢迎各方大佬给予点评和指导。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值