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

目录

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

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


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

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

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

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

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

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

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

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

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

相关推荐
上海云盾-高防顾问21 小时前
CDN缓存命中率太低?动态智能预加载技术深度解析
缓存
Wilson Chen21 小时前
Spring Boot 多级缓存实现与优化:从本地缓存到 Redis
spring boot·redis·缓存
-大头.21 小时前
Redis内存碎片深度解析:从动态整理到核心运维实践
运维·数据库·redis
while(1){yan}1 天前
MYSQL索引的底层数据结构
数据结构·数据库·mysql
她说..1 天前
基于Redis实现的分布式唯一编号生成工具类
java·数据库·redis·分布式·springboot
合作小小程序员小小店1 天前
web网页开发,在线%人力资源管理%系统,基于Idea,html,css,jQuery,java,jsp,ssh,mysql。
java·前端·css·数据库·mysql·html·intellij-idea
Dream it possible!1 天前
LeetCode 面试经典 150_二叉树层次遍历_二叉树的层平均值(82_637_C++_简单)
c++·leetcode·面试·二叉树
半聋半瞎1 天前
【JVM操作字节码文件流程详解】
java·jvm·面试
我还可以再学点1 天前
八股文面试攻略四:网络篇
网络·面试·职场和发展
伯明翰java1 天前
Redis学习笔记-List列表(2)
redis·笔记·学习