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