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

一、面试题

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

二、面试官心理剖析

       你只要用缓存,就可能会涉及到缓存与数据库双存储双写,你只要双写,就一定会有数据一致性的问题。那你如何解决一致性问题。

三、面试题剖析

       一般来说,如果你的系统不是严格要求缓存+数据库必须一致性的话,允许缓存可以稍微的跟数据库偶尔有不一致的情况。最好不要做这个方案。读请求和写请求串行化,串到一个内存队列里。这样就可以保证一定不会出现不一致的情况。

四、Cache Aside Pattern

       最经典的缓存+数据库的读写模式就是 Cache Aside Pattern。

        1、读的时候,先读缓存,缓存没有的话,就读数据库。取出数据后放入缓存,同时返回相应。

        2、更新的时候,先更新数据库,再删除缓存。

五、为什么是删除缓存而不是更新缓存

        原因很简单,一些复杂点的缓存场景,缓存不单单是数据库中直接取出来的值。比如更新了某个表的1个字段。然后其对应的缓存,是需要查询另外两个表的数据并进行运算,才能计算出缓存最近的值。

        另外更新缓存的代价有时候是很高的。是不是说,每次修改数据库的时候,都一定要将其对应的缓存更新一份?也许有的场景是这样,但是对于比较复杂的缓存数据计算的场景,就不是这样了。如果你频繁修改一个缓存涉及的多个表,缓存也频繁更新。但是问题在于,这个缓存到底会不会被频繁访问到?
        举个栗子,一个缓存涉及的表的字段,在 1 分钟内就修改了 20 次,或者是 100 次

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值