更新操作写入消息队列,然后由消息队列保证最终一致性。 消费者从队列中读取更新消息,并按照消息顺序更新数据库和缓存。 「4. 事务性缓存」 使用支持事务的缓存解决方案,如使用支持事务的缓存中间件。 在数据库事务提交的同时,提交缓存的变更。 「5. 最终一致性模型」 接受缓存和数据库之间存在短暂的数据不一致。 通...
先更新数据库,再删除缓存 操作流程:先在数据库中进行数据更新操作,成功后删除对应的缓存数据。 优点:相对简单直观。 缺点:存在删除缓存失败的情况,可能导致短时间的数据不一致。可以通过重试机制或异步补偿任务来处理删除失败的情况。 先删除缓存,再更新数据库 操作流程:先删除缓存,然后进行数据库更新操作。 优点:在并...
先删除缓存,后更新数据库,再删除缓存 这个方案其实跟前面的方案差不多,因为还是会出现前面方案提到的脏数据问题——在更新数据库成功后和删除缓存成功前读到的都是旧数据,不过能规避第二步删除缓存失败的问题,因为该方案是先删除缓存再更新数据库。只有在第一步和第二步之间又有查询请求,把旧的数据重新加载到缓存...
1.先更新数据库,再更新缓存 A 请求先 将数据库的数据更新为 1,然后在更新缓存前,请求 B 将数据库的数据更新为 2,紧接着也把缓存更新为 2,然后 A 请求更新缓存为 1 此时,数据库中的数据是 2,而缓存中的数据却是 1,出现了缓存和数据库中的数据不一致的现象。 如果业务对缓存命中率有很高的要求,可以采...
先更新数据库,再删除缓存,确保缓存中的数据无效化。流程描述 读请求到达:查询缓存:若缓存中存在数据...
如果把写数据库和写缓存操作,放在同一个事务当中,当写缓存失败了,我们可以把写入数据库的数据进行回滚。 如果是并发量比较小,对接口性能要求不太高的系统,可以这么玩。 但如果在高并发的业务场景中,写数据库和写缓存,都属于远程操作。为了防止出现大事务,造成的死锁问题,通常建议写数据库和写缓存不要放在同一个事...
1)请求A发起查询请求,直接到数据库查询到100,但还没有来得及去设置缓存2)请求B更新值,先更新数据库,在删除缓存3)请求A这时才设置缓存为100 这种情况发生的不一致,是因为缓存突然失效了。而且还要保证请求B更新操作 比 请求A的查询操作还要快;才会导致不一致。这种情况概率会很少。一般要求不高的项目可以...
2. 缓存缓存是一种临时存储技术,其目的是为了提高数据访问速度。缓存通常存储在内存中,这样可以实现比从磁盘读取数据更快的访问速度。缓存的典型应用场景包括网页缓存、数据库查询缓存、CDN 等。二、缓存与数据库数据一致性问题缓存与数据库数据一致性问题的本质是,在缓存和数据库之间,数据可能因为各种原因出现不一致...
2. 分析并选择合适的一致性保障策略 2.1 先更新数据库再删除缓存 这是最常见的一种策略,流程如下: 更新数据库。 删除缓存中的数据(如果存在)。 这种策略的优点是实现简单,但在高并发场景下可能存在缓存击穿问题(即缓存失效瞬间大量请求直接回源到数据库)。 2.2 延迟双删策略 为了解决缓存击穿问题,可以使用延迟双...