双写一致性问题:同一份数据,需要写数据库、写缓存。数据库中的数据和缓存中的数据要一致
解决办法:延迟双删
当我们要进行更新操作时,先删除缓存,再更新数据库,延迟几百ms再删除一次redis的缓存数据。
示例:
1.当我们在线程1中进行更新数据操作时,先删除了redis中的缓存,
2.这时切换到线程2中进行了数据查询操作,线程2未从缓存中查到数据,就从数据库中查到旧数据,并把旧数据存入缓存中,这时线程1把新数据更新入数据库,出现了双写不一致问题。
3.这时让线程1延迟几百ms后再删一次redis中的缓存。下次查询依旧会从数据库中得到新数据。