在日常开发当中为了提高响应率,减少响应时长,缓存是一定会用的。那么在修改数据库的时候缓存的更新肯定会有延迟,如何保存缓存和数据库数据的一致性是一个问题。
方案1:同步删除
顾名思义在修改数据库数据的时候,同步删除缓存
缺点:
1、不能保证每个入口都能同步删除
2、如果直接修改数据库不能同步删除
3、如果缓存删除失败,会出现脏数据
方案2: 延迟双删
删除缓存-》修改数据库-〉等待一段时间在删除一次缓存
缺点:
1、无法确定延迟时间(主从同步会出现延迟)
2、无法绝对保障数据一致
方案3: 异步监听binlog删除+重试
使用中间件监听数据库产生的binlog-》删除缓存数据(消费失败重试)
缺点:
1、相对于同步删除,脏数据窗口较大(相对来说,实际上时间是比较短的)
2、mq可能挂机(几率较小)
3、新老库迁移,可能出现数据不一致(大部分场景不会出现)