延迟双删

  1. 1update DB
  2. 2、删除redis
  3. 3sleep xx(ms)
  4. 4、删除redis

为什么需要sleep?
因为在第一步之前可能A先查到了数据,还没来得及写入到redis,此时B更新了DB并且删除了redis,然后A将老数据写到redis,这就造成了数据的不一致。所以需要延迟一会,等A将老数据写到redis后再删除一次。
即解决如下这种情况

  1. A:get key
  2. B:update key newValue
  3. B:del key
  4. A:set key oldValue
  5. // 此时数据不一致,所以需要再删除一次。
  6. B:sleep xx
  7. B:del key

删除失败怎么办?
将失败的数据的key保存到重试队列,再次删除。