当我们更新数据库的时候,需要保持数据可的数据和缓存中的数据保持一致
在业务背景的不同,所对应的就有两种解决方式
1.必须保证强一致性的业务:
解决方案:
i:延迟双删,先去删除缓存,再去更新数据库,等待一段时间后再去删除缓存,
删除两次缓存的原因:由于我们的线程是交替执行的,有可能再缓存中还存在数据库已经更新之前的脏数据,所以我们要再删一遍缓存。
延时删除的原因:数据库一般是主从模式,读写分离的,所以我们要等待一会让主节点把数据同步到从节点之后再进行删除,当然在延迟双删的过程中依然不能保证数据的强一致性
ii:采用读写锁进行控制
由于我们存入缓存中的数据一般都是读多写少,我们可以采用Redisson中的读写锁来进行完成,读锁只允许多个线程进行读操作,无法进行写操作,,写锁则是只能让一个线程做写操作,这样我们就实现的数据的强一致性
2.可以允许延迟一致的业务:
在更改数据库之后,通过MQ发送异步请求完成缓存的更新