延迟双删
1、update DB
2、删除redis
3、sleep xx(ms)
4、删除redis
为什么需要sleep?
因为在第一步之前可能A先查到了数据,还没来得及写入到redis,此时B更新了DB并且删除了redis,然后A将老数据写到redis,这就造成了数据的不一致。所以需要延迟一会,等A将老数据写到redis后再删除一次。
即解决如下这种情况
A:get key
B:update key newValue
B:del key
A:set key oldValue
// 此时数据不一致,所以需要再删除一次。
B:sleep xx
B:del key
删除失败怎么办?
将失败的数据的key保存到重试队列,再次删除。