美文网首页
缓存⼀致性问题2

缓存⼀致性问题2

作者: 嘘寒问暖 | 来源:发表于2022-07-22 23:44 被阅读0次

先更新数据库,再删除缓存

如果反过来操作,先更新数据库,再删除缓存呢?这个就更明显的问题了,更新数据库成功,如果删除缓存失败或者还没有来得及删除,那么,其他线程从缓存中读取到的就是旧值,还是会发⽣不⼀致。

解决⽅案

消息队列

这是⽹上很多⽂章⾥都有写过的⽅案。但是这个⽅案的缺陷会更明显⼀点。先更新数据库,成功后往消息队列发消息,消费到消息后再删除缓存,借助消息队列的重试机制来实现,达到最终⼀致性的效果。

这个解决⽅案其实问题更多。

1. 引⼊消息中间件之后,问题更复杂了,怎么保证消息不丢失更麻烦

2. 就算更新数据库和删除缓存都没有发⽣问题,消息的延迟也会带来短暂的不⼀致性,不过这个延迟相对来说还是可以接受的

进阶版消息队列

为了解决缓存⼀致性的问题单独引⼊⼀个消息队列,太复杂了。其实,⼀般⼤公司本身都会有监听binlog消息的消息队列存在,主要是为了做⼀些核对的⼯作。这样,我们可以借助监听binlog的消息队列来做删除缓存的操作。这样做的好处是,不⽤你⾃⼰引⼊,侵⼊到你的业务代码中,中间件帮你做了解耦,同时,中间件的这个东⻄本身就保证了⾼可⽤。当然,这样消息延迟的问题依然存在,但是相⽐单纯引⼊消息队列的做法更好⼀点。⽽且,如果并发不是特别⾼的话,这种做法的实时性和⼀致性都还算可以接受的。

相关文章

  • 缓存⼀致性问题2

    先更新数据库,再删除缓存 如果反过来操作,先更新数据库,再删除缓存呢?这个就更明显的问题了,更新数据库成功,如果删...

  • FIFO 、LRU、LFU三种算法

    提到缓存,有两点是必须要考虑的: (1)缓存数据和目标数据的一致性问题。 (2)缓存的过期策略(机制)。 其中,缓...

  • java并发编程(一)缓存一致性协议

    多线程环境下存在的问题 缓存一致性问题,指令重拍问题,可见性,有序性, 缓存一致性问题 在多处理器系统中,每个处理...

  • 缓存⼀致性问题

    关于Redis的其他的⼀些⾯试问题已经写过了,⽐如常⻅的缓存穿透、雪崩、击穿、热点的问题,但是还有⼀个⽐较麻烦的问...

  • JMM 内存模型简析

    高速缓存 cpu(CPU寄存器)<---> CPU高速缓存 <---> 主内存RAM 缓存一致性问题:多个处理器的...

  • 缓存

    通过本文档,你将会了解到 为什么要使用缓存 本地缓存它不香么?为什么要使用redis缓存, 缓存一致性问题,缓存穿...

  • java多线程-3-volatile

    缓存一致性问题 起因:高速缓存 方案总线LOCK#锁,释放锁前该块内存无法被别的cpu或线程访问缓存一致性协议(I...

  • Java多线程(5)

    Java多线程(5) CPU缓存一致性问题 因为缓存的出现,极大提高了CPU的吞吐能力,但同时也引入了缓存不一致的...

  • 多线程安全问题:可见性、原子性、有序性

    引言 CPU缓存与内存产生的一致性问题 CPU时间片切换产生的原子性问题 CPU指令编译优化产生的有序性问题 并发...

  • 高并发场景下的缓存有哪些常见的问题?

    一、缓存一致性问题 当数据时效性要求很高时,需要保证缓存中的数据与数据库中的保持一致,而且需要保证缓存节点和副本中...

网友评论

      本文标题:缓存⼀致性问题2

      本文链接:https://www.haomeiwen.com/subject/rbvvirtx.html