首页 星云 工具 资源 星选 资讯 热门工具
:

PDF转图片 完全免费 小红书视频下载 无水印 抖音视频下载 无水印 数字星空

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

编程知识
2024年07月23日 16:50

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

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、设计模式、消息队列等模块。

From:https://www.cnblogs.com/vipstone/p/18319206
本文地址: http://shuzixingkong.net/article/334
0评论
提交 加载更多评论
其他文章 一文全解:LVM(逻辑卷管理器)
一般而言,在生产环境中无法在最初时就精确地评估每个硬盘分区在日后的使用情况,因此会导致原先分配的硬盘分区不够用。比如,伴随着业务量的增加,用于存放交易记录的数据库目录的体积也随之增加;因为分析并记录用户的行为从而导致日志目录的体积不断变大,这些都会导致原有的硬盘分区在使用上捉襟见肘。硬盘分好区或者部
一文全解:LVM(逻辑卷管理器) 一文全解:LVM(逻辑卷管理器) 一文全解:LVM(逻辑卷管理器)
使用 useRequestEvent Hook 访问请求事件
摘要:本文介绍Nuxt 3中useRequestEventHook的使用,可访问请求路径、方法和头部信息,适用于SSR环境下处理请求逻辑,如中间件、插件及API路由。仅服务器端生效,需注意安全性。
使用 useRequestEvent Hook 访问请求事件 使用 useRequestEvent Hook 访问请求事件
[NOIP2008 提高组] 笨小猴(洛谷题号P1125)
[NOIP2008 提高组] 笨小猴 题目描述 笨小猴的词汇量很小,所以每次做英语选择题的时候都很头疼。但是他找到了一种方法,经试验证明,用这种方法去选择选项的时候选对的几率非常大! 这种方法的具体描述如下:假设maxn是单词中出现次数最多的字母的出现次数,minn是单词中出现次数最少的字母的出现次
关于游戏中声音控制的思路
之前对于声音控制是从网上搜索的,但是搜索的都五花八门,有对声音预处理的,有使用奇怪函数的, 后来思考了一下我找到所有actor然后找到RootComponent中枚举出SoundComponent,然后对其进行控制。当然在制作中要注意了,因为我枚举的是root下的child,所以声音组件一定要放到R
关于游戏中声音控制的思路
从DDPM到DDIM (一) 极大似然估计与证据下界
从DDPM到DDIM (一) 极大似然估计与证据下界 现在网络上关于DDPM和DDIM的讲解有很多,但无论什么样的讲解,都不如自己推到一遍来的痛快。笔者希望就这篇文章,从头到尾对扩散模型做一次完整的推导。本文的很多部分都参考了 Calvin Luo[1] 和 Stanley Chan[2] 写的经典
从DDPM到DDIM (一) 极大似然估计与证据下界 从DDPM到DDIM (一) 极大似然估计与证据下界
【实时最新】开源新纪元:Llama 3.1超大杯405B跑分惊艳,首次超越GPT-4o,下载链接曝光!
开源巨擘Llama 3.1崭露头角,性能卓越引发热议 在科技界的瞩目下,Llama 3.1系列模型以其卓越的性能脱颖而出,尤其是其405B超大杯版本,在微软Azure-ML GitHub平台的多项评测中展现出非凡实力,不仅超越了GPT-4o,就连70B版本也能与GPT-4o分庭抗礼。值得注意的是,这
【实时最新】开源新纪元:Llama 3.1超大杯405B跑分惊艳,首次超越GPT-4o,下载链接曝光! 【实时最新】开源新纪元:Llama 3.1超大杯405B跑分惊艳,首次超越GPT-4o,下载链接曝光! 【实时最新】开源新纪元:Llama 3.1超大杯405B跑分惊艳,首次超越GPT-4o,下载链接曝光!
制作KubeVirt镜像
目录制作KubeVirt镜像1. 准备磁盘文件2. 编写Dockerfile3. 构建镜像4. 上传镜像到仓库(可选)5. 导出镜像6. 虚拟机yaml文件7. 启动虚拟机8. 启动虚拟机报错 制作KubeVirt镜像 我们现在已经安装好了Kubevirt并且也运行了第一个虚拟机,但是这个虚拟机并不
SpringBoot实战:Spring Boot接入Security权限认证服务
引言 Spring Security 是一个功能强大且高度可定制的身份验证和访问控制的框架,提供了完善的认证机制和方法级的授权功能,是一个非常优秀的权限管理框架。其核心是一组过滤器链,不同的功能经由不同的过滤器。本文将通过一个案例将 Spring Security 整合
SpringBoot实战:Spring Boot接入Security权限认证服务