一致性
包含如下情况:
不符合这两种情况的,都属于缓存和DB数据不一致。
延迟双删(Delay Double Delete)是一种在数据更新或删除时为了保证数据一致性而采取的策略。这种策略通常用于解决数据在缓存和数据库中不一致的问题。 具体来说,在某些场景下,我们需要先更新或删除数据库中的数据,然后再更新或删除缓存中的数据,以保证数据的一致性。。
在删除缓存之后,让当前线程休眠一段时间,然后再次删除缓存。这个时间段是为了给数据库操作足够的时间来完成,确保数据已经持久化到数据库中。通过延迟双删,可以防止在休眠期间有其他线程读取到旧的缓存数据,从而保证数据的一致性。 值得注意的是,不管哪种方案,都避免不了Redis存在脏数据的问题,只能减轻这个问题,要想彻底解决,得要用到同步锁和对应的业务逻辑层面解决。
RedisUtils.del(key);// 先删除缓存
updateDB(user);// 更新db中的数据
Thread.sleep(N);// 延迟一段时间,在删除该缓存key
RedisUtils.del(key);// 先删除缓存
上述中(延迟N秒)的时间要大于一次写操作的时间。原因:如果延迟时间小于写入redis的时间,会导致请求1清除了缓存,但是请求2缓存还未写入的尴尬。。。
在业务程序运行时,统计业务逻辑执行读数据和写缓存的操作时间,以此为基础来进行估算。因为这个方案会在第一次删除缓存值后,延迟一段时间再次进行删除,所以称为“延迟双删”。
把几种方案进行总结会得到这样的结论
根据具体的应用场景和需求,可以选择合适的缓存策略或结合多种策略来提高系统性能和数据一致性。