Interview

保证双写一致性?;

1,延迟双写:更新时先更新数据库,删除缓存,;下次读取时更新缓存     缺点:

  • 如果数据库写操作失败,应用可能需要回滚其他已完成的操作,这可能导致复杂性。
  • 对于高并发系统,缓存可能在数据被写入数据库后和被删除之前被多次访问,导致脏读。

2,使用队列;

  1. 写操作

    • 当有一个更新操作时,首先将它放入一个消息队列(如 Kafka、RabbitMQ)。
    • 在此期间,缓存可以被标记为"脏"或直接被清除,以防止脏读。
  2. 队列消费者

    • 消费者从队列中取出更新操作。
    • 消费者首先更新数据库。
    • 确保数据库更新成功后,消费者再更新缓存。
  3. 读操作

    • 首先从缓存中读取数据。
    • 如果缓存中没有数据或被标记为"脏",则从数据库中读取。

优点:

  • 通过序列化更新操作,确保数据库和缓存的更新顺序一致。
  • 可以容忍短时间的不一致,因为最终一致性会被保证。

局限性:

  • 引入消息队列增加了系统的复杂性。
  • 可能会增加延迟,因为更新操作需要经过消息队列。

3, 牺牲性能,使用分布式锁;;

  • Redis:Redis提供了分布式锁的实现,例如使用SETNX命令。
  • Zookeeper:Zookeeper的Ephemeral Sequential节点可以用来实现分布式锁。
  • etcd:etcd提供了对分布式锁的原生支持。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值