当前位置: 首页 > news >正文

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

一.核心知识

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.xdnf.cn/news/567055.html

相关文章:

  • 解除diffusers库的prompt长度限制(SDXL版)
  • ArcGIS Pro 3.4 二次开发 - 核心主机
  • Linux yq 命令使用详解
  • 【Qt】QImage实战
  • 一文读懂迁移学习:从理论到实践
  • Git Clone 原理详解:为什么它比本地文件复制更快? -优雅草卓伊凡
  • word格式相关问题
  • C语言——函数递归与迭代
  • 微调后的模型保存与加载
  • Android13 wifi设置国家码详解
  • 结课作业01. 用户空间 MPU6050 体感鼠标驱动程序
  • SuperVINS:应对挑战性成像条件的实时视觉-惯性SLAM框架【全流程配置与测试!!!】【2025最新版!!!!】
  • flink 提交流程
  • 基于Flink的数据中台管理平台
  • CNN手写数字识别/全套源码+注释可直接运行
  • 基于moonshot模型的Dify大语言模型应用开发核心场景
  • 如何成为更好的自己?
  • AI智能分析网关V4玩手机检测算法精准管控人员手机行为,搭建智慧化安防监管体系
  • iOS 15.4.1 TrollStore(巨魔商店)安装教程详解:第二篇
  • Ubuntu学习记录
  • vscode打开vue + element项目
  • ADB常用语句
  • springboot 1.x2.x依赖spring版本
  • 初识Linux · 五种IO模型和非阻塞IO
  • Flink基本理解
  • 初识Linux · NAT 内网穿透 内网打洞 代理
  • 【题解-洛谷】B4240 [海淀区小学组 2025] 最短字符串
  • buunctf Crypto-[NCTF2019]Keyboard1
  • 腾讯游戏安全与高通合作构建PC端游安全新格局
  • 改写视频生产流程!快手SketchVideo开源:通过线稿精准控制动态分镜的AI视频生成方案