为什么要延迟双删,来保证缓存一致性
为什么要延迟双删,来保证缓存一致性
- 在删除数据库数据前,需要先删除一次redis:此时是为了保证在数据库数据删除和redis数据被删除的间隔时间内,如有命中,保证此数据也不存在redis中。如果没有这一次删除,当数据库数据已经被删除了,但是还是可以从redis中读出数据,导致数据不一致。
- 第二次删除则是在删除数据库数据后,此时需要再次删除redis中对应数据一次,这一次是为了删除 第一次redis删除和数据库数据删除之间,如果有请求,那么数据又会重新缓存到redis中,然而数据在数据库中在接下来就会被删掉,如果没有这一次删除,redis中则会存在数据库中不存在的数据。
- 那么第二次为什么需要在数据库删除后延迟一定时间再删除redis呢?
a. 主要是为了等待数据的真正同步,因为主从,会有一定的延迟,代码中发出了删除数据的指令,但是当所有数据库集群中对应数据都被删除还需要时间,如果redis删除过早又回出现数据库中数据被重新缓存到redis中,导致数据不一致