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

目录

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

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


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

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

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

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

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

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

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

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

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

相关推荐
IT小哥哥呀24 分钟前
MyBatis 性能优化指南:Mapper 映射、缓存与批量操作实战
缓存·性能优化·mybatis·数据库优化·批量插入·分布式系统·sql性能
unicrom_深圳市由你创科技28 分钟前
MySQL 全文索引进阶:中文分词配置 + 模糊查询性能优化
mysql·性能优化·中文分词
沐浴露z29 分钟前
详细解析 MySQL 性能优化之【索引下推】
数据库·mysql·性能优化
li37149089043 分钟前
k8s中应用容器随redis集群自动重启
redis·容器·kubernetes
那我掉的头发算什么43 分钟前
【javaEE】多线程--认识线程、多线程
java·jvm·redis·性能优化·java-ee·intellij-idea
程序员卷卷狗1 小时前
联合索引的最左前缀原则与失效场景
java·开发语言·数据库·mysql
用户9714171814271 小时前
JavaScript 数组方法完全指南
javascript·面试
晴殇i2 小时前
《效率翻倍!12个被90%前端忽视的CSS神技》
前端·css·面试
敖云岚2 小时前
【疑难解答】MySQL 报错 Public Key Retrieval is not allowed
数据库·mysql
ヾChen3 小时前
MySQL——增删改查操作
数据库·sql·物联网·学习·mysql