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

目录

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

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


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

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

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

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

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

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

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

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

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

相关推荐
kyriewen10 小时前
用魔法打败魔法:我让AI替我去面试前端岗,AI面试官给我打了92分,还发了offer
前端·javascript·面试
Lkstar11 小时前
Vue keep-alive 原理全解:LRU 缓存策略、源码级理解
前端·vue.js·面试
plainGeekDev11 小时前
Android内存面试题:OOM都解决不了,性能优化从何谈起?
android·面试·kotlin
我是一颗柠檬12 小时前
【MySQL全面教学】MySQL基础SQL语句Day3(2026年)
数据库·后端·sql·mysql·oracle
MandalaO_O12 小时前
MyBatis 与 MySQL 执行流程
数据库·mysql·mybatis
蝎子莱莱爱打怪13 小时前
👍🏻👍🏻6年381颗芯片+韬定律,华为重新定义半导体,为什么还有人喷???
后端·面试·程序员
Donk_6713 小时前
ELK+Redis架构搭建
redis·elk·架构
键盘上的猫头鹰14 小时前
【从零学MySQL(三)】数据增删改(DML)及 SELECT 查询详解
数据库·mysql·数据分析
星轨zb14 小时前
JUC 到 Redis 分布式锁:一次关于高并发的性能压测实验
java·redis·分布式·jmeter
渐儿14 小时前
RAG / GraphRAG / 向量检索 面试题(完整答案版)
面试