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

目录

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

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


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

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

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

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

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

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

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

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

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

相关推荐
m0_639906946 小时前
Redis入门|五种数据结构、使用场景、持久化RDB&AOF
数据结构·数据库·redis
时间售卖铺7 小时前
触发器与函数实战:MySQL高效编程秘诀
运维·数据库·mysql·云原生
数据库小组10 小时前
NineData 实战教程:MySQL 5.5 数据迁移同步到 MySQL 8.0(跨版本升级)
数据库·mysql·mysql优化·数据库开发·数据库迁移·版本升级·数据复制
每天进步一点点km11 小时前
自用-牛客网-华为机试编程模拟题1-python
华为od·华为·面试
cnskylee11 小时前
【MySQL】麒麟V10 SP3系统安装MySQL-Commercial-8.0.46
数据库·mysql·adb
梦幻通灵11 小时前
修改MySQL数据库递增序列【持续更新】
数据库·mysql
IT规划师11 小时前
Redis 数据类型全解 - String 不只是 get set:90% 开发者忽略的 8 个高阶用法与内存陷阱(一)
redis·.net core
大侠归来12 小时前
常用 MySQL 分库分表方案详解
数据库·mysql
Flynn Liang13 小时前
内存/Redis/PGVector/Milvus/ES 怎么选?Spring AI VectorStore 抽象与向量库选型对照表
redis·elasticsearch·milvus·rag·springai·pgvector·向量库