面试题:如何解决缓存和数据库的一致性问题?

本文涉及的产品
RDS AI 助手,专业版
RDS MySQL DuckDB 分析主实例,基础系列 4核8GB
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
简介: 面试题:如何解决缓存和数据库的一致性问题?

所谓的一致性问题是指,在同时使用缓存和数据库的情况下,要确保数据在缓存与数据库中的更新操作保持同步。也就是当对数据进行修改时,无论是先修改缓存还是先修改数据库,最终都要保证两者的数据是一样的,不会出现数据不一样的问题。

1.一致性问题解决方案

缓存和数据库一致性的经典解决方案有以下两个:

  1. 使用延迟双删 + MQ 保证数据的一致性。
  2. 通过 Canal 监听 MySQL 的 Binlog 写入日志,之后将写入操作(增加、删除和修改)的信息发送至 Kafka,程序监听到 Kafka 的消息后更新 Redis,从而保证数据的最终一致性。

    需要注意的是,无论使用的是延迟双删还是 Canal,都会出现短暂数据不一致性的问题,但可以保证最终的数据一致性。

然而,如果使用的是延迟双删 + MQ 的这种方式的时候,有一个棘手的问题很难处理,那就是如何设置延迟时间?

如果延迟时间设置的比较短,那么在并发场景下会出现数据不一致的问题;如果延迟时间设置的比较长,那么在比较长的这段时间内还会有数据不一致的问题。这个问题归根到底的原因是,并发线程的调度时间不能人为的控制(由操作系统统一调度)。

所以基于以上原因,使用 Canal 来保证数据一致性问题变成了一个比较不错的解决 Redis 和 MySQL 数据一致性的有效手段。

2.Canal执行流程

通过 Canal 保证数据一致性的实现流程如下图所示:
image.png

3.Canal操作流程

使用 Canal 读取 MySQL 的 Binlog 配置步骤如下:

  1. 开启并配置 MySQL 的 Binlog 设置。
  2. 重启 MySQL 服务。
  3. 给 MySQL 配置 canal/canal 用户用于后续 Canal 同步数据(此步骤非必须)。
  4. 安装并解压 Canal。
  5. 修改 canal.properties 配置文件,让其将数据同步到 Kafka,并配置 Kafka 服务器信息。
  6. 修改 example/instance.properties 配置文件,指定同步数据到 Kafka 某个主题。
  7. 拷贝 plugin 中的 jar 包到 lib 目录,让 Canal 支持将数据同步到 MQ。
  8. 启动 Canal 服务。
  9. 在代码中监听 Kafka 主题,并判断并更新 Redis 缓存。

Kafka 中存储的数据格式如下:
image.png

4.最后

理论如同明灯照亮前行的道路,实践则是我们坚实的脚步。唯有将两者紧密结合,不断地练习和实践,我们才能在求知的旅程中稳步前行,收获真正的成长与进步。所以,一起行动起来,光看不练都是假把式。

本文已收录到我的面试小站 www.javacn.site,其中包含的内容有:Redis、JVM、并发、并发、MySQL、Spring、Spring MVC、Spring Boot、Spring Cloud、MyBatis、设计模式、消息队列等模块。

相关文章
|
5月前
|
缓存 Java 应用服务中间件
Spring Boot配置优化:Tomcat+数据库+缓存+日志,全场景教程
本文详解Spring Boot十大核心配置优化技巧,涵盖Tomcat连接池、数据库连接池、Jackson时区、日志管理、缓存策略、异步线程池等关键配置,结合代码示例与通俗解释,助你轻松掌握高并发场景下的性能调优方法,适用于实际项目落地。
922 5
|
11月前
|
缓存 NoSQL 关系型数据库
WordPress数据库查询缓存插件
这款插件通过将MySQL查询结果缓存至文件、Redis或Memcached,加速页面加载。它专为未登录用户优化,支持跨页面缓存,不影响其他功能,且可与其他缓存插件兼容。相比传统页面缓存,它仅缓存数据库查询结果,保留动态功能如阅读量更新。提供三种缓存方式选择,有效提升网站性能。
221 1
|
11月前
|
消息中间件 缓存 NoSQL
缓存与数据库的一致性方案,Redis与Mysql一致性方案,大厂P8的终极方案(图解+秒懂+史上最全)
缓存与数据库的一致性方案,Redis与Mysql一致性方案,大厂P8的终极方案(图解+秒懂+史上最全)
|
存储 缓存 NoSQL
云端问道21期方案教学-应对高并发,利用云数据库 Tair(兼容 Redis®*)缓存实现极速响应
云端问道21期方案教学-应对高并发,利用云数据库 Tair(兼容 Redis®*)缓存实现极速响应
377 1
|
缓存 NoSQL 关系型数据库
云端问道21期实操教学-应对高并发,利用云数据库 Tair(兼容 Redis®)缓存实现极速响应
本文介绍了如何通过云端问道21期实操教学,利用云数据库 Tair(兼容 Redis®)缓存实现高并发场景下的极速响应。主要内容分为四部分:方案概览、部署准备、一键部署和完成及清理。方案概览中,展示了如何使用 Redis 提升业务性能,降低响应时间;部署准备介绍了账号注册与充值步骤;一键部署详细讲解了创建 ECS、RDS 和 Redis 实例的过程;最后,通过对比测试验证了 Redis 缓存的有效性,并指导用户清理资源以避免额外费用。
298 1
|
存储 Java easyexcel
招行面试:100万级别数据的Excel,如何秒级导入到数据库?
本文由40岁老架构师尼恩撰写,分享了应对招商银行Java后端面试绝命12题的经验。文章详细介绍了如何通过系统化准备,在面试中展示强大的技术实力。针对百万级数据的Excel导入难题,尼恩推荐使用阿里巴巴开源的EasyExcel框架,并结合高性能分片读取、Disruptor队列缓冲和高并发批量写入的架构方案,实现高效的数据处理。此外,文章还提供了完整的代码示例和配置说明,帮助读者快速掌握相关技能。建议读者参考《尼恩Java面试宝典PDF》进行系统化刷题,提升面试竞争力。关注公众号【技术自由圈】可获取更多技术资源和指导。
|
缓存 NoSQL Serverless
云数据库Tair:从稳定低延时缓存到 Serverless KV
本次分享聚焦云数据库Tair的使用,涵盖三部分内容:1) Tair概览,介绍其作为稳定低延时缓存及KV数据库服务的特点和优势;2) 稳定低延迟缓存技术,探讨如何通过多线程处理、优化内核等手段提升性能与稳定性;3) 从缓存到Serverless KV的演进,特别是在AI大模型时代,Tair如何助力在线服务和推理缓存加速。Tair在兼容性、性能优化、扩缩容及AI推理加速方面表现出色,满足不同场景需求。
|
5月前
|
缓存 关系型数据库 BI
使用MYSQL Report分析数据库性能(下)
使用MYSQL Report分析数据库性能
444 158
|
5月前
|
关系型数据库 MySQL 数据库
自建数据库如何迁移至RDS MySQL实例
数据库迁移是一项复杂且耗时的工程,需考虑数据安全、完整性及业务中断影响。使用阿里云数据传输服务DTS,可快速、平滑完成迁移任务,将应用停机时间降至分钟级。您还可通过全量备份自建数据库并恢复至RDS MySQL实例,实现间接迁移上云。
|
5月前
|
关系型数据库 MySQL 数据库
阿里云数据库RDS费用价格:MySQL、SQL Server、PostgreSQL和MariaDB引擎收费标准
阿里云RDS数据库支持MySQL、SQL Server、PostgreSQL、MariaDB,多种引擎优惠上线!MySQL倚天版88元/年,SQL Server 2核4G仅299元/年,PostgreSQL 227元/年起。高可用、可弹性伸缩,安全稳定。详情见官网活动页。
1039 152