延迟双删+消息队列
为什么要使用消息队列?
因为消息队列里面有消息确认机制,它可以保证我们执行完第一步之后,即时掉电重启的情况,依然可以执行后续的流程,因为之前的消息,未进行消息确认,所以程序重启之后,会继续执行后续的流程,这样就保证了业务执行的完整性。 通过消息中间件的死信队列来做删除缓存的操作,每次需要清理缓存我们就把需要删除缓存的key丢入消息队列,再写一个删除缓存的消费者,删除成功就返回消费成功,删除失败就返回消费失败,删除失败的消息队列机制反复消费直到删除成功为止。
什么是延迟双删?
延迟双删指的是删除两次缓存(并且最后一次是延迟删除),具体执行流程如下:
- 删除缓存
- 更新数据库
- 延迟一会再删除缓存
最后一次延迟删除缓存的原因是,为了避免上面因为并发问题导致保存旧值的情况发生,所以会延迟一段时间之后再进行删除操作。这样即使有并发问题,也能最大限度的解决保存旧值的情况,因为是延迟之后删除的,所以即使因为并发问题保存了旧值,但延迟一段时间之后旧值就会被删除,那么这样就自然而然的保证了数据库和缓存的最终一致性。