系统架构设计师案例分析题——数据库缓存篇

一.核心知识

1.redis和MySQL的同步方案怎么做的?

  • 读数据:先查询缓存,缓存不存在则查询数据库,然后将数据新增到缓存中
  • 写数据:新增时,先新增数据库,数据库成功后再新增缓存;更新和删除时,先更新或者删除数据库中的数据,再删除缓存或者修改缓存的过期时间

2.实现Redis和MySQL之间的同步的方法

  • 利用触发器
  • 通过数据库插件
  • 异步队列方式同步,可采用消息中间件处理
  • 实现同步方案,先查缓存,查不到再从DB查询,并保存到缓存,更新缓存时先更新数据库,再讲缓存设置过期

3.Redis分布式存储常见方案

中从模式、哨兵模式、集群模式

4.Redis集群切片的常见方式

  • 客户端分片:即在客户端就通过key的hash值对应到不同的服务器
  • 中间件实现分片:再应用软件和Redis中间,由中间件实现服务到后台Redis节点的路由分派
  • 客户端服务端协作分片:Redis cluster模式,客户端采用一致哈希,服务端提供错误节点的重定向服务slot上

5.分布式缓存

在高并发的环境下,为了减轻数据库压力,提高系统响应事件,在应用和数据库之间增加独立缓存系统,常见的分布式缓存有Redis和memcache。

6.解决SQL注入有哪几种方式

  • 正则表达式
  • 参数化的过滤语句
  • 检查用户的输入合法化
  • 数据加密处理
  • 存储过程
  • 漏洞扫描工具
  • web防火墙

7.Redis缓存淘汰机制

  • 所有key中随机淘汰一个key
  • 在过期时间的key中,删除使用频率最少的key
  • 在过期时间的key中,删除即将要过期的key
  • 所以key中,删除最不经常使用的key
  • 随机删除设置了过期时间的key

8.Redis数据结构与文件持久化差别在哪

  • 磁盘更新频率:前者频率较慢,后者每条指令对数据的操作都要保存,默认时间1秒
  • 数据安全:前者不如后者安全
  • 数据一致性:RDB可能发生数据丢失和不一致,后者即使宕机也能解决一致性问题
  • 重启性能:前者恢复速度比后者快很多
  • 数据文件大小:前者保存整个数据库的快照,容量比后者大

二.案例考察扩展

1.简要说明数据迁移准备工作的内容

  • 待迁移数据源的详细说明:包括数据的存放方式、数据量和数据的时间跨度
  • 建立新旧系统数据库的数据字典,对现有系统的历史数据进行质量分析,以及新旧系统数据结构的差异分析
  • 新旧系统代码数据的差异分析
  • 建立新旧系统数据库表的映射关系,对无法映射字段的处理方法
  • 开发或者购买、部署ETL工具
  • 编写数据转换的测试计划和校验程序
  • 制定数据转换的应急措施

2.SQL语句优化的常见策略

  • 建立雾化视图或者尽可能减少多表查询。
  • 以不相干子查询替代相干子查询。
  • 只检索需要的列。
  • 用带in的条件子句等价替换or子句。
  • 经常提交commit,以尽早释放锁。
  • 避免嵌套的游标和多重循环等。

三.真题

1.2024下半年

Cache-aside架构,也称为旁路缓存模式,是一种常见的缓存使用策略。

1+2.填空流程图说明缓存读写的过程。

  1. 向缓存请求读取该商品信息
  2. 若命中则返回该商品信息
  3. 若未命中则访问数据库查询该商品信息
  4. 将查询到的数据库数据更新到缓存
  5. 将查询到的数据库目标数据返回

  • 更新数据库中的目标商品信息。
  • 将数据库中更新的商品信息写入到缓存中,确保数据一致性。

3.王工使用了多线程技术进行缓存处理,线程1负责写入,线程2负责读取,可能存在数据一致性问题,请解释其原因,并给出3个以上的解决办法。

原因:

  • 如果没有适当的同步机制,两个或多个线程可能同时访问和修改共享资源,导致最终结果取决于线程调度顺序。
  • 在多线程环境中,一个线程对共享变量所做的更改不一定立刻被其他线程看到。
  • 写入操作可能不是一个原子操作,意味着它可以被中断或分段执行。

解决方案:

  • 延时双删
  • 同步删除
  • 加互斥锁(分布式锁)
  • 消息队列
  • 基于缓存更新策略

2.2024上半年

1.使用基于数据库的分布式锁所存在的缺陷

基于数据库的分布式锁虽然实现简单,但在高并发、高可用性场景下存在一些明显的缺陷,主要包括以下几个方面:

  • 数据库读写性能较低,锁竞争导致连接池耗尽
  • 非原子性操作具有风险
  • 数据库锁通常是非公平的
  • 如果使用单机数据库,一旦数据库宕机,所有依赖它的分布式锁将失效。
  • 锁超时的时间难以设定

2.redis的几种操作命令

  • 写入:SET key value,哈希:HSET key field value
  • 查询:GET key,哈希:HGET key field
  • 删除:DEL key1 [key2],哈希:HDEL key field1 [field2]

3.基于redis的数据库锁也会存在死锁场景,举例说明:

 

基于数据库的分布式锁和基于redis的分布式锁都存在问题,还有哪些其它的分布式锁的类型?

  • 利用 ZooKeeper 的 临时有序节点(Ephemeral Sequential Nodes) 实现锁竞争。
  • 基于 etcd 的 租约(Lease) 和 事务(TXN) 实现
  • 利用 Consul 的 KV 存储+Session 机制
  • 基于 Redlock 的分布式锁(Redis 多实例)
  • 基于 Chubby(Google)的分布式锁,Google 内部的分布式锁服务,类似 ZooKeeper 但更强调高可用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/81934.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

什么是智能体?

什么是智能体? 智能体(AI Agent)是一种能够自主感知环境、做出决策并执行任务的智能实体,其核心依赖大型语言模型(LLM)或深度学习算法作为“大脑”模块。它通过感知模块(如多模态输入&#xff…

企业数字化转型是否已由信息化+自动化向智能化迈进?

DeepSeek引发的AI热潮迅速蔓延到了各个行业,目前接入DeepSeek的企业,涵盖了科技互联网、云服务、电信、金融、能源、汽车、手机等热门领域,甚至全国各地政府机构也纷纷引入。 在 DeepSeek 等国产 AI 技术的推动下,众多企业已经敏锐…

广州卓远VR受邀参加2025智能体育典型案例调研活动,并入驻国体华为运动健康联合实验室!

近日,“2025年智能体育典型案例调研活动”在东莞松山湖成功举办。本次调研活动由国家体育总局体育科学研究所和中国信息通信研究院联合主办,旨在深入贯彻中央关于培育新型消费的战略部署,通过激活智能健身产品消费潜力,加快运动健…

springboot+vue实现鲜花商城系统源码(带用户协同过滤个性化推荐算法)

今天教大家如何设计一个 鲜花商城 , 基于目前主流的技术:前端vue3,后端springboot。学习完这个项目,你将来找工作开发实际项目都会又很大帮助。文章最后部分还带来的项目的部署教程。 系统有着基于用户的协同过滤推荐算法,还有保证…

【android bluetooth 协议分析 02】【bluetooth hal 层详解 3】【高通蓝牙hal主要流程介绍-上】

1. 背景 本节主要讨论 高通 蓝牙 hal 中,的一些流程。 看看你是否都清楚如下问题: 高通芯片电如何控制?串口是在哪里控制的?固件如何下载?初始化流程是怎么样的? 如果你已经对上述讨论的问题&#xff0c…

JavaEE 初阶文件操作与 IO 详解

一、文件操作基础:File 类 作用:操作文件或目录(创建、删除、获取信息)。 核心方法: exists():文件是否存在createNewFile():创建新文件mkdir():创建目录delete():删除…

C++(27): 标准库 <iterator>

目录 1. 核心概念 2. 基本语法 3. 特点 4. 特有成员函数与工具 5. 内存与性能 6. 示例代码 7. 成员函数与类型 8. 使用场景 9. 注意事项 1. 核心概念 迭代器(Iterator) 是 C++ 中用于访问和遍历容器元素的通用接口,类似于指针,但支持更丰富的操作。 抽象访问机制:…

谈谈 Kotlin 中的构造方法,有哪些注意事项?

在 Kotlin 中,构造方法分为主构造方法(Primary Constructor)和次构造方法(Secondary Constructor)。 1 主构造方法 主构造方法是类的核心构造方法,直接在类头声明,位于类名之后。 1.1 基本语…

年会招标抽奖活动软件———仙盟创梦IDE

年会是企业一年的总结与欢庆时刻,而抽奖环节更是点燃全场气氛的关键。如何让抽奖环节既大气又充满仪式感?选对抽奖软件至关重要!本文精心挑选了 3 款兼具实用性与氛围感的年会抽奖软件,从界面设计到功能特色,全方位为你…

安全软件检测进程异常行为-Postgresql应用执行异常指令whoami

文章目录 环境症状问题原因解决方案 环境 系统平台:UOS(海光) 版本:4.5.8 症状 数据库安装包: 安全软件告警中提示“sh -c whoami”命令,是由数据库发出的,安全软件捕获到了postgres.exe–fo…

车载诊断架构 --- LIN 节点 ECU 故障设计原则

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 钝感力的“钝”,不是木讷、迟钝,而是直面困境的韧劲和耐力,是面对外界噪音的通透淡然。 生活中有两种人,一种人格外在意别人的眼光;另一种人无论…

GPU加速的AlphaFold3蛋白质复合体预测:如何在64GB显存下跑超大规模模型(混合精度+模型并行实战技巧)

一、AlphaFold3的超大规模挑战与优化方向 AlphaFold3作为当前生物计算领域的革命性工具,其核心架构基于扩散模型,能够预测包含蛋白质、核酸、小分子配体等复杂生物复合物的三维结构。然而,模型参数量级(典型配置超百亿级&#xf…

Qt功能区:Ribbon控件

控件 1. 按钮1.1 多选按钮1.2 2. 下拉列表框SARibbonComboBox2.1 简介2.2 代码实现 1. 按钮 1.1 多选按钮 软件功能:用于实现Category的名称居中。 SARibbonCheckBox继承于QCheckBox,使用方法完全相同。 SARibbonCheckBox* checkBox new SARibbonChe…

一个由微软开源的 Python 工具,用于将多种文件格式转换为 Markdown 格式

📚 Markitdown 由微软开源的 Python 工具,用于将多种文件格式转换为 Markdown 格式 支持:PDF、PowerPoint、Word、Excel、图像、音频、HTML、文本格式(CSV、JSON、XML)、ZIP 文件的转换。 它旨在提供一个简单且灵活的…

Linux的进程概念

目录 1、冯诺依曼体系结构 2、操作系统(Operating System) 2.1 基本概念 2.2 目的 3、Linux的进程 3.1 基本概念 3.1.1 PCB 3.1.2 struct task_struct 3.1.3 进程的定义 3.2 基本操作 3.2.1 查看进程 3.2.2 初识fork 3.3 进程状态 3.3.1 操作系统的进程状态 3.3…

export和import的书写方式

一、导出模块(export) 1. 命名导出(Named Exports) // math.js export const PI 3.14159; // 导出单个常量 export function sum(a, b) { return a b; } // 导出单个函数 export class Calculator { /* ..…

HOW - 结合 AI 进行 Tailwind 样式开发

文章目录 情况 1:使用 Tailwind CSS 与手写传统 CSS 的开发效率对比情况 2:AI Tailwind 自动生成 UI 的效率如何?总结 在 WHAT - Tailwind 样式方案(不写任何自定义样式) 中我们已经简单介绍过 Tailwind。今天主要认识…

java面试每日一背 day1

1.什么是缓存穿透 缓存穿透是指查询一个数据库中根本不存在的数据,导致这个查询请求绕过缓存直接访问数据库的情况。这种情况如果频繁发生,会对数据库造成不必要的压力。 典型特征: (1)查询的数据在数据库和缓存中都…

ngx_http_realip_module 模块概述

一、使用场景 日志记录 记录真实客户端 IP 而非反向代理的 IP,有助于流量分析和安全审计。访问控制 基于真实 IP 实现防火墙规则(allow/deny)或限流,而非误将上游 IP 视为客户端。GeoIP、WAF、限速等功能 模块化的上游真实 IP 支…

实战5:个性化数字艺术生成与销售

盈利思路 数字艺术销售: 平台销售:将生成的数字艺术作品上传到像OpenSea、Foundation等NFT平台进行售卖。每一件独特的艺术品可以通过NFT技术保证其唯一性,吸引收藏家和投资者。 定价策略:根据作品的复杂度、创意性以及市场需求来…