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

16 篇文章 0 订阅
5 篇文章 0 订阅

拜读了: 美团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有更好的性能,缓存中写入新数据的及时也能降低读到脏数据的风险。

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

  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值