1、实现强一致性
读操作时:
写操作时:
两次删除缓存在更新缓存,是为了预防其他线程查询缓存未命中时再一次写入了缓存。
在第二次删除缓存时,需要延时以下,是由于数据库可能存在主从数据需要同步,但是延时多少时间不好确定,为了解决这个问题,可以用以下读写锁方案实现强一致:
对于读操作:使用redisson的读写锁,获取读锁,读完数据释放锁。其他线程可以共享读操作,对于写是不行的
对于写操作:同样使用redisson的读写锁,获取写锁,就是排他锁。其他线程读写都无法操作。
业务必须是强一致性的时候适合用读写锁,因为在写操作时,会导致其他线程无法操作,性能较低。
2、异步通知实现最终一致性
最终一致性,就是允许短暂的延时,但是最终需要保持一致。
可以使用MQ实现
可以使用Canal实现