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

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

双写一致性

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

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

写操作:延迟双删

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

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

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

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

3、为什么要延时双删?

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

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

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

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

允许延迟

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

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

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

相关推荐
苦瓜小生7 分钟前
【黑马点评学习笔记 | 实战篇 】| 7-达人探店
redis·笔记·后端·学习
大树学长14 分钟前
【QT开发】Redis通信相关(一)
redis·qt
常利兵37 分钟前
Spring Boot缓存新玩法:一键切换,租户无忧
spring boot·后端·缓存
知识分享小能手1 小时前
Redis入门学习教程,从入门到精通,Redis进阶编程知识点详解(5)
数据库·redis·学习
6+h1 小时前
【Redis】数据结构讲解
数据结构·数据库·redis
WmStack2 小时前
‘秒杀’功能实现
redis
Lyyaoo.2 小时前
Spring Boot日志
spring boot·缓存·单元测试
无籽西瓜a2 小时前
Docker 环境下 Redis Lua 脚本部署与执行
redis·docker·lua
疯狂成瘾者2 小时前
Redis 实用学习清单
redis·学习
只能是遇见2 小时前
ERROR 1524 (HY000) Plugin ‘mysql_native_password‘ is not loaded
android·数据库·mysql