Redis之双写一致性

510次阅读
没有评论

共计 686 个字符,预计需要花费 2 分钟才能阅读完成。

什么是双写一致

双与一致性:当修改了数据库的数据也要同时更新缓存的数据,缓存和数据库的数据要保持一致

什么是延迟双删

延迟双删,如果是写操作,我们先把缓存中的数据删除,然后更新数据库,最后再延时删除缓存中的数据,其中这个延时多久不太好确定,在延时的过程中可能会出现脏数据,并不能保证强一致性

Redis之双写一致性

redis做为缓存,mysql的数据如何与redis进行同步呢? (双写一致性)

  • 我们当时是把文章的热点数据存入到了缓存中,虽然是热点数据,但是实时要求性并没有那么高,所以,我们当时采用的是异步的方案同步的数据
  • 我们当时是把抢券的库存存入到了缓存中,这个需要实时的进行数据同步,为了保证数据的强一致,我们当时采用的是redisson提供的读写锁来保证数据的同步。
  • 在读的时候添加共享锁,可以保证读读不互斥,读写互斥。
  • 当我们更新数据的时候,添加排他锁,它是读写,读读都互斥,这样就能保证在写数据的同时是不会让其他线程读数据的,避免了脏数据。这里面需要注意的是读方法和写方法上需要使用同一把锁才行。

那你来介绍一下异步的方案(你来介绍一下redisson读写锁的这种方案)

允许延时一致的业务,采用异步通知
使用mq中间中间件,更新数据之后,通知缓存删除
利用canal中间件,不需要修改业务代码,伪装为mysq的一个从节点,canal通过读取binlog数据更新缓存
强一致性的,采用redisson提供的读写锁
共享锁:读锁readlock,加锁之后,其他线程可以共享读操作
排他锁:独占锁writelock也叫,加锁之后,阻塞其他线程读写操作

异步通知方案

  • RABBITMQ异步通知的实现
  • Redis之双写一致性
  • Canal异步通知的实现

    Redis之双写一致性

正文完
 
BlackBeans
版权声明:本站原创文章,由 BlackBeans 2023-10-11发表,共计686字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
评论(没有评论)