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

缓存⼀致性问题

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

关于Redis的其他的⼀些⾯试问题已经写过了,⽐如常⻅的缓存穿透、雪崩、击穿、热点的问题,但是还有⼀个⽐较麻烦的问题就是如何保证缓存⼀致性。对于缓存和数据库的操作,主要有以下两种⽅式。

先删缓存,再更新数据库

先删除缓存,数据库还没有更新成功,此时如果读取缓存,缓存不存在,去数据库中读取到的是旧值,缓存不⼀致发⽣。

解决⽅案

一:延时双删

延时双删的⽅案的思路是,为了避免更新数据库的时候,其他线程从缓存中读取不到数据,就在更新完数据库之后,再sleep⼀段时间,然后再次删除缓存。sleep的时间要对业务读写缓存的时间做出评估,sleep时间⼤于读写缓存的时间即可。

流程如下:

1. 线程1删除缓存,然后去更新数据库

2. 线程2来读缓存,发现缓存已经被删除,所以直接从数据库中读取,这时候由于线程1还没有更新完成,所以读到的是旧值,然后把旧值写⼊缓存

3. 线程1,根据估算的时间,sleep,由于sleep的时间⼤于线程2读数据+写缓存的时间,所以缓存被再次删除

4. 如果还有其他线程来读取缓存的话,就会再次从数据库中读取到最新值

相关文章

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

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

  • 缓存⼀致性问题

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

  • JMM 内存模型简析

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

  • 缓存

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

  • java多线程-3-volatile

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

  • Java多线程(5)

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

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

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

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

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

  • 缓存在高并发场景下的常见问题

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

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

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

网友评论

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

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