1> 先更新Mysql,再更新redis,如果更新redis失败,则数据可能仍然不一致。
2> 先删除redis缓存数据,再更新mysql,再次查询的时候将数据重新添加到缓存中,这种可以解决问题一,但是在高并发场景下性能较低,而且仍会出现数据不一致的问题,比如线程一删除了redis缓存,正在更新mysql,此时线程二来查询数据,就会将mysql中的老数据写入到缓存中。
3> 延时双删,先删除redis中的缓存,再更新mysql,延迟几百毫秒后再删除redis缓存数据,这样就算在更新mysql时,有其他线程读了mysql,把老数据读到了缓存中,那么也会被删除掉,这样就保证了数据一致性。