redis作为缓存,mysql的数据如何与redis同步

先介绍自己的业务背景,是一致性要求高的 还是 允许延迟一致,因为两者的回答不一样。

双写一致性

双写一致性:当修改了数据库的数据也要同时更新缓存的数据,缓存和数据库的数据要保持一致。

读操作:缓存命中,直接返回;缓存未命中查询数据库,写入缓存,设定超时时间

写操作:延迟双删

1、此时,先删除缓存,还是先修改数据库?

无论哪个先后,都会出现问题

2、为什么要删除两次缓存?

先删除缓存,再操作数据库,有时候会有脏数据,所以在操作数据库之后再删除一次缓存,降低脏数据的出现。

3、为什么要延时双删?

一般情况下数据库是主从模式,读写分离的,需要延时一会,让主结点把数据同步到从节点,所以需要延时,但延时还是会出现脏数据。

如何数据的保持强一致性呢?

1)在写数据或读数据的时候添加分布式锁,但效率太低。

2)一般存入缓存中的数据都是读多写少,可以用共享锁和排他锁,但效率还是低,但能保证数据的强一致性

允许延迟

第一种方式:适用MQ中间件,更新MySQL的数据后,发一条消息给MQ,同时缓存服务接收这条消息,将数据同步到缓存中

第二种方式: 不需要修改任何业务代码,利用canal伪装mysql的一个从节点,去读取binlog的日志,并更新缓存

结合自己的业务回答,参考:

相关推荐
snow@li6 分钟前
数据库:MySQL vs PostgreSQL 详尽对比(2026版)
java·mysql·postgresql
xieliyu.43 分钟前
MySQL 全套入门笔记:基础、库操作、数据类型
数据库·笔记·mysql
小小工匠1 小时前
Redis - 缓冲区管理:避免溢出引发的“惨案“
redis·性能优化·集群·内存管理·持久化
invicinble1 小时前
sql层面语法的总结(mysql层面语法,主要侧重于sql的查询相关的信息量积累)
sql·mysql·oracle
小小工匠1 小时前
Redis - 缓存与数据库一致性:问题分析与解决方案
redis·缓存·性能优化·消息队列·并发
cui_ruicheng1 小时前
MySQL(三):库操作与表操作
数据库·mysql·oracle
闪电悠米1 小时前
黑马点评-Redis 消息队列-02_list_pubsub_limits
java·数据库·ide·redis·缓存·list·intellij-idea
折哥的程序人生 · 物流技术专研1 小时前
《Java 100 天进阶之路》第93篇:Redis实战应用:缓存策略与分布式锁(2026版)
java·redis·缓存·面试·架构·求职招聘
zhangjw342 小时前
MySQL数据库零基础入门,数据库原理、SQL详解、库表操作、字段约束、基础查询全覆盖
数据库·sql·mysql
IT策士2 小时前
Redis 从入门到精通:数据结构Set 与 Sorted
数据结构·数据库·redis