首页/新闻资讯/正文详情

【系统架构设计师-案例题-分布式系统设计】24年下半:Redis(1)数据库缓存设计

发布时间:2026/11/3 2:04:20 来源:云帆数科 栏目:资讯中心
【系统架构设计师-案例题-分布式系统设计】24年下半:Redis(1)数据库缓存设计
文章目录题目背景题目 1Cache-Aside 读数据流程设计题目描述答案与解析题目 2Cache-Aside 写数据流程设计题目描述答案与解析重点: 理解先更新库再删除缓存的原理题目 3多线程下的数据一致性问题题目描述答案与解析题目背景为了提升某购物网站的用户使用体验采用数据库缓存技术将经常访问的商品信息存储在一个临时高速数据存储层中这个临时存储层使得未来对这些数据的请求响应比通过访问主数据库更快。为了确保快速、及时获取最新数据项目组决定采用缓存数据技术开展项目设计经讨论决定采用Cache-Aside策略作为缓存手段。题目 1Cache-Aside 读数据流程设计题目描述使用 Cache-Aside 缓存策略当用户查询商品信息时此请求会从应用程序服务器发送请求到数据库服务器通过缓存系统处理然后返回所请求的信息请补充完善图1中 (1) ~ (5) 处的内容协助设计师完成缓存系统中的数据读取模块的设计方案。答案与解析答案(1)查询数据并判断是否命中(2)缓存命中返回数据(3)缓存未命中向数据库读数据(4)更新缓存(5)返回数据核心概念解释Cache-Aside (旁路缓存) 读策略通俗类比图书馆借书缓存 你的书桌拿取方便但空间有限数据库 图书馆书架书全但拿取慢读流程先看书桌上有没有(1) 查询缓存。如果有直接看(2) 命中返回。如果书桌上没有就得去书架上找(3) 读数据库。找到后顺手把书带回书桌放好方便下次看(4) 更新缓存。最后开始阅读(5) 返回数据。详细分析Cache-Aside 模式是最常用的缓存策略。其核心逻辑是“懒加载”只有当数据被需要且缓存中没有时才从数据库加载到缓存。应用层先请求缓存。缓存命中直接返回数据结束流程。缓存未命中应用层去查询数据库。回填应用层获取到数据后并发起一个写操作将数据写入缓存。返回将数据返回给用户。考点Cache-Aside 模式、缓存读流程题目 2Cache-Aside 写数据流程设计题目描述使用 Cache-Aside 缓存策略当用户更新商品信息时此请求会从应用服务器发送至数据库服务器并进行缓存处理请补充完善图2中 (1) 和 (2) 处的内容协助工程师完成缓存系统中的数据更新模块的设计方案。答案与解析重点: 理解先更新库再删除缓存的原理答案(1)写入数据更新数据库(2)删除缓存失效缓存详细分析在 Cache-Aside 模式中写操作的标准流程是先更新数据库然后删除缓存。为什么是删除而不是更新缓存如果是更新缓存在并发写的情况下可能出现先后顺序错乱导致缓存中保留的是旧数据脏数据。删除缓存是一种懒操作下次读取时自然会去数据库拉取最新的保证了最终一致性。为什么先更新数据库再删除缓存如果先删除缓存再更新数据库。在两者之间另一个线程读取数据发现缓存空了去读数据库旧值然后写入缓存。紧接着数据库更新完成。这样缓存里就一直是旧数据了。虽然先更库再删存也存在极端并发问题读操作在读旧值和写缓存之间刚好插入了一个写操作但概率极低因为写缓存通常比查库快得多。考点Cache-Aside 模式、缓存与数据库一致性题目 3多线程下的数据一致性问题题目描述李工设计了多线程并发数据访问方案采用线程1执行数据更新线程2执行数据读取。王工认为这样的设计方案会存在数据不一致现象请说明李工所设计的方案为什么会出现数据库与缓存中的数据不一致的情况并给出3种或以上的解决方案。答案与解析答案原因分析根本原因在于 Cache-Aside 策略的非原子性。更新操作写库删存和读取操作读存读库写存在多线程环境下无法保证严格的时序一致性导致出现短暂的数据状态不一致窗口。解决方案任选3种锁机制引入读写锁保证更新期间无法读取。异步队列方式同步利用消息中间件如 Kafka进行重试或顺序处理。通过数据库插件完成数据同步如监听 MySQL Binlog 自动更新缓存。延迟双删策略先删缓存 - 更新数据库 - 休眠片刻 - 再删缓存。详细分析针对线程 1 写数据、线程 2 读缓存时可能出现的数据不一致问题以下是几种主流解决方案的详细解析异步队列方式同步消息中间件原理利用 Kafka/RabbitMQ 等消息队列。当线程 1 更新完数据库后发一个消息到队列。有一个消费者线程专门盯着队列收到消息后去更新或删除缓存。优点解耦保证最终一致性这里做了trade off且带有重试机制如果删缓存失败可以重试。通过数据库插件完成数据同步Binlog 监听原理使用如 Canal 等工具伪装成数据库的从库监听主库的 Binlog操作日志。一旦发现数据库有变动工具自动解析日志并去更新缓存。优点代码侵入性小完全由后台服务自动完成同步应用层不需要关心缓存更新逻辑。锁机制读写锁原理在代码层加锁。更新数据时加写锁此时任何人都不能读读数据时加读锁。优点强一致性绝对不会读到脏数据。缺点并发性能大大降低锁竞争可能导致系统变慢。延迟双删策略原理为了防止先删缓存再更库期间被别人读了旧值又写回缓存。我们可以在更完库之后等一会延迟再删一次缓存。确保把刚才那个空档期可能产生的脏数据删掉。考点并发控制、分布式系统一致性、缓存更新策略

相关推荐

【62】饮料容器数据集(有v5/v8模型)/YOLO饮料容器检测
【62】饮料容器数据集(有v5/v8模型)/YOLO饮料容器检测

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 2:04:20

【Kubernetes】 常用命令速查与参数详解
【Kubernetes】 常用命令速查与参数详解

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 2:04:20

【Python环境管理】uv下一代Python包管理工具:替代 pip + venv + poetry 的组合
【Python环境管理】uv下一代Python包管理工具:替代 pip + venv + poetry 的组合

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 2:04:20

如何用Docker 10分钟部署text-humanizer?Docker Compose与Ollama本地大模型接入指南
如何用Docker 10分钟部署text-humanizer?Docker Compose与Ollama本地大模型接入指南

【免费下载链接】text-humanizer Advanced open-source AI humanizer designed to make AI-generated text undetectable by Turnitin, GPTZero, and other AI detection services. 项目地址: https://gitcode.com/gh_mirrors/te/text-humanizer 点击查看 免费下载 … · 2026/11/3 2:33:25

网盘直链下载怎么做?用 LinkSwift 快速直链解析 8 大网盘真实地址
网盘直链下载怎么做?用 LinkSwift 快速直链解析 8 大网盘真实地址

网盘直链下载怎么做?用 LinkSwift 快速直链解析 8 大网盘真实地址 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百度网盘 / 阿里云盘 / 中国移动… · 2026/11/3 2:33:25

minimax-h3-nvfp4-convrot核心原理:逐层量化配置如何把33B模型压进20GB(NVFP4+FP8+BF16混合深度解析)
minimax-h3-nvfp4-convrot核心原理:逐层量化配置如何把33B模型压进20GB(NVFP4+FP8+BF16混合深度解析)

minimax-h3-nvfp4-convrot核心原理:逐层量化配置如何把33B模型压进20GB(NVFP4FP8BF16混合深度解析) minimax-h3-nvfp4-convrot 是一套面向 MiniMax H3(33B 参数全能视频音频生成模型)的 NVFP4 / INT4 量化 ComfyUI 单… · 2026/11/3 2:33:25

HunyuanVideo 文生视频部署指南:ComfyUI 插件与量化模型选型
HunyuanVideo 文生视频部署指南:ComfyUI 插件与量化模型选型

HunyuanVideo 文生视频部署指南:ComfyUI 插件与量化模型选型 【免费下载链接】HunyuanVideo HunyuanVideo: A Systematic Framework For Large Video Generation Model 项目地址: https://gitcode.com/gh_mirrors/hu/HunyuanVideo 用 HunyuanVideo 文生视频模… · 2026/11/3 2:33:25

python使用命令如何运行程序
python使用命令如何运行程序

一、在中, 使用命令行来运行程序的主要方法一共有三种, 分别是通过命令直接运行.py文件、在交互式解释器里面运行代码, 还有通过脚本去执行那些命令行参数, 其中通过命令来运行py文件这个方法就是最常用的一种方法, 假设你现在有一个名字是.py的文件, 那么你可以在命令行当中输… · 2026/11/3 2:33:25

dotfiles 隐藏效率脚本大揭秘:tmux-sessionizer、fzf-git 等 4 个实战 Shell 脚本解析
dotfiles 隐藏效率脚本大揭秘:tmux-sessionizer、fzf-git 等 4 个实战 Shell 脚本解析

【免费下载链接】dotfiles ⌨️ The never ending updates of my dotfiles config 项目地址: https://gitcode.com/gh_mirrors/dotfiles2789/dotfiles 点击查看 免费下载 这是一篇面向新手的 dotfiles 效率脚本教程:本文深入解析 dotfiles 仓库中 4 个实… · 2026/11/3 2:32:24

双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/2 13:10:28

STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/2 4:42:45

DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/2 5:17:18

STM32F411RE与MAX14431实现SPI隔离:工业现场抗共模干扰实战
STM32F411RE与MAX14431实现SPI隔离:工业现场抗共模干扰实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 1:01:59

ESP32+大模型AI硬件开发:从Demo到产品的8个工程问题
ESP32+大模型AI硬件开发:从Demo到产品的8个工程问题

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 1:01:59

基于MAX14431BAEE+与PIC18F85J10的SPI隔离方案设计与实践
基于MAX14431BAEE+与PIC18F85J10的SPI隔离方案设计与实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 1:01:59

双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/2 13:10:28

STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/2 4:42:45

DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/2 5:17:18

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码