共计 686 个字符,预计需要花费 2 分钟才能阅读完成。
什么是双写一致
双与一致性:当修改了数据库的数据也要同时更新缓存的数据,缓存和数据库的数据要保持一致
什么是延迟双删
延迟双删,如果是写操作,我们先把缓存中的数据删除,然后更新数据库,最后再延时删除缓存中的数据,其中这个延时多久不太好确定,在延时的过程中可能会出现脏数据,并不能保证强一致性
redis做为缓存,mysql的数据如何与redis进行同步呢? (双写一致性)
- 我们当时是把文章的热点数据存入到了缓存中,虽然是热点数据,但是实时要求性并没有那么高,所以,我们当时采用的是异步的方案同步的数据
- 我们当时是把抢券的库存存入到了缓存中,这个需要实时的进行数据同步,为了保证数据的强一致,我们当时采用的是redisson提供的读写锁来保证数据的同步。
- 在读的时候添加共享锁,可以保证读读不互斥,读写互斥。
-
当我们更新数据的时候,添加排他锁,它是读写,读读都互斥,这样就能保证在写数据的同时是不会让其他线程读数据的,避免了脏数据。这里面需要注意的是读方法和写方法上需要使用同一把锁才行。
那你来介绍一下异步的方案(你来介绍一下redisson读写锁的这种方案)
允许延时一致的业务,采用异步通知
使用mq中间中间件,更新数据之后,通知缓存删除
利用canal中间件,不需要修改业务代码,伪装为mysq的一个从节点,canal通过读取binlog数据更新缓存
强一致性的,采用redisson提供的读写锁
共享锁:读锁readlock,加锁之后,其他线程可以共享读操作
排他锁:独占锁writelock也叫,加锁之后,阻塞其他线程读写操作
异步通知方案
- RABBITMQ异步通知的实现
-
Canal异步通知的实现
正文完