本文介绍: redis做为缓存mysql数据如何redis进行同步呢?(双写一致性):嗯!就说我最近做的这个项目里面xxxx()的功能需要数据库redis高度保持一致,因为要求时效性比较高,我们当时采用读写锁保证的强一致性我们采用的是redisson实现读写锁,在读的时候添加共享锁,可以保证读读不互斥读写互斥。当我们更新数据的时候,添加排他锁,它是读写,读读都互斥,这样就能保证在写数据的同时是不会让其他线程读数据的,避免了脏数据。这里面需要注意的是读方法和写方法需要使用同一把锁才行。

目录

强一致性:延迟双删,读写锁。

弱一致性:使用MQ或者canal实现异步通知


面试官redis做为缓存mysql的数据如何redis进行同步呢?(双写一致性

候选人:嗯!就说我最近做的这个项目里面xxxx根据自己简历上写)的功能需要数据库redis高度保持一致,因为要求时效性比较高,我们当时采用读写锁保证的强一致性

我们采用的是redisson实现读写锁,在读的时候添加共享锁,可以保证读读不互斥读写互斥。当我们更新数据的时候,添加排他锁,它是读写,读读都互斥,这样就能保证在写数据的同时是不会让其他线程读数据的,避免了脏数据。这里面需要注意的是读方法和写方法上需要使用同一把锁才行。

一致性延迟双删,读写锁。

无论是先删除缓存,还是先修改数据库,都会造成脏数据的问题

删除两次缓存就是为了解决脏数据的问题,先删除缓存修改数据库会造成脏数据,所以再删除缓存

延时删除,是因为数据库一般都是主从模式,读写分离的,延时一点时间,使得主节点把数据同步到从节点。(但是延时也可能会出现问题,延时的时间不好确定,也有脏数据的风险,所以,延迟双删是做不到绝对的强一致的)

使用读写锁,可以达到强一致性,但是性能低。

一致性使用MQ或者canal实现异步通知

原文地址:https://blog.csdn.net/xiaoshuzuiwuqing/article/details/134616262

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_21308.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除!

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注