赞
踩
一致性就是数据保持一致,在分布式系统中,可以理解为多个节点中数据的值是一致的
操作缓存采用删除缓存而不是更新缓存:
为什么需要休眠一会?
同样道理,当线程A删除缓存后,在更新数据库之前,线程B发起一个读请求,读到了未更新的数据并且写入到缓存中,线程A完成数据库更新后,此时出现数据不一致,缓存中的是脏数据,休眠一会再删除缓存,就是为了防止这个脏数据影响到后续的请求
只有休眠时间段,可能有脏数据,一般场景也会接受。但是也存在第二次删除缓存失败的情况。可以给Redis的key设置下过期时间
如果第二次删除缓存失败了怎么办?
除了设置key失效时间外,等key失效了,在写入最新的数据这种方法外,我们可以在缓存删除失败后记录相关的key到消息队列中,异步重试,这样可以缩短等待的时间,毕竟缓存失效时间一般会比消息队列消费的时间长
除了记录删除失败的缓存key这种方式做异步重试外,还可以通过数据库的binlog日志进行异步数据同步
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。