前言:
线程1在写完数据库后(10) ,-没有立即更新缓存, 在此期间 ,线程2 写数据库然后更新缓存为6,此时线程1在去更新缓存 会把6变成10 这就导致 数据库中的值是6 但是缓存中是10 这就是缓存数据双写不一致
市面上解决方法:
三缓存:
写完数据以后立马删除缓存,下次数据过来的时候先读缓存 如果缓存没有数据去查数据库,更新缓存
问题:
:如图所示 在线程3查完数据库后卡住了,迟迟没有更新缓存,在此期间线程2进来写数据库更新数据为6然后删除缓存,此时线程3在去更新缓存 为10 数据直接不匹配了
延迟双删:
简答来说就是在删除缓存后sleep一会 在此期间让其他线程来更新缓存
问题:
如果延时时间大于sleep的时间不就炸了