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

目录

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

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


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

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

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

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

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

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

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

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

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

相关推荐
小鱼爱吃草灬灬23 分钟前
实时面试辅助排查清单:音频来源、问题输入与上下文
面试·职场和发展·音视频
Linux-lucky23 分钟前
36-Linux学习之旅之MySQL主从复制
linux·运维·学习·mysql·ubuntu
极小狐1 小时前
CI 流水线提速实战:缓存设计与依赖代理的工程实践
缓存·ci/cd·gitlab·devops
kyrie_sakura1 小时前
MySQL数据库学习笔记3--关联(联合)查询
数据库·学习·mysql
莫得感情 o2 小时前
Redis 09 · 高可用:Sentinel 如何发现故障并完成切主
redis·缓存·sentinel
石小千2 小时前
MySQL 8.4设置密码策略
数据库·mysql
蜡台3 小时前
# 已解决|MySQL 8\.4\.11 密码正确仍报错1045 \(28000\) Access denied 终极修复方案
android·mysql·adb
考虑考虑3 小时前
Redis8.8新特性
运维·redis·后端
leoZ2313 小时前
2026-09-08-mysql-57-init-walkthrough
前端·javascript·数据库·vue.js·opencv·mysql·adb
颜挺锐3 小时前
如何轻松通过性能测试面试之第九篇:RPO、RTO是什么意思
面试·职场和发展