本文主要说明双写一致性,保证数据一致性
Keyword: 延迟双删
注意:延迟双删不能保证数据的强一致性,延迟删除时可能也会导致脏数据出现
先上概念
双写一致性: 如果修改了数据库的数据,同时也要更新缓存中的数据,保证缓存和数据库的数据一致性。
一般请求时的查询数据过程
简单来说就是,查询数据时,如果缓存存在该数据则直接返回,否则会去数据库中查询,查询后再将该数据存入缓存中, 并且会设置过期时间。
读写操作
读操作
就是上图所述
写操作
延迟双删即修改数据库时,需要删除缓存->修改数据库->删除缓存
- 是先删缓存,再修改数据库,还是反过来? 为什么这两种方式都不能保证数据一致性?
先删缓存,再修改数据库
先修改数据库,再删缓存
正常情况
不一致情况 - 为什么需要延迟删除?
数据库主从复制需要时间进行同步数据
强一致性(加锁)
这种会导致性能下降,只适用于读多写少的场景
使用异步通信(MQ)
缺点:太过依赖于 MQ 的可靠性