在并发情况下,线程A比线程B先更新数据库,但是由于某些原因,线程A比线程B晚更新缓存,就会导致缓存的数据还是老的数据,有了脏数据,而删除就不会有这种情况
对于频繁写的场景,缓存就会频繁更新,浪费性能...,再删除缓存,不会有问题吗,其实也有问题,如下图
线程A读取数据A,发现缓存没有数据,就会读取数据库,此时还没有更新缓存,但是线程B,先更新了数据库,由于缓存没有数据,就不涉及删除缓存,但是此时线程A...异步删除缓存
延迟双删策略,先删除缓存,再更新数据库,然后等待1秒,再次删除缓存,这个等待时间要根据业务处理时间适当调整,这样就是为了读请求带来的脏数据,可以再第二次删除掉,清除脏数据
删除缓存重试机制...,不管是使用双删策略,还是Cache-Aside Pattern模式,如果第二步删除失败,都可能带来数据不一致问题,
因此我们就可以在删除的时候重复删除,当我们删除失败的时候,我们可以把删除的key放入到消息队列中...,则从数据库获取,再更新缓存,然后返回
是更新操作,先更新数据库,再删除缓存
为了保证上一步删除成功,采用binlog异步删除
如果是主从数据库,则使用从库采集binlog异步删除
如果是一主多从,采集所有的从库