方案一.延迟双删
1. 第一次删除
mysql更新数据前将redis缓存删除,如果redis为null则直接访问msyql
2. 如果在mysql更新过程中(未更新完)有请求,那么redis为null直接访问mysql读到脏数据,这个数据必须删除
3. 第二次删除(延迟删除)
在mysql更新完成时延迟删除redis,为什么要延迟呢?因为要等可能存在的脏数据。
方案二.canal订阅mysql master的binlog
canal 作为mysql从机订阅binglog,每当主机发生update delete insert,
canal都会监听到,通知消mq、redis或 elasticsearch等