软考(系统架构师)-案例分析之Redis与缓存

考题分析

redis与缓存题目主要集中在案例分析,主要会考察缓存数据一致性,缓存与数据库数据操作等相关问题,此部分比较重要

NoSQL

NoSQL(Not-only SQL):不仅仅只是SQL,泛指非关系型数据库,用于解决传统关系型数据库难以应对的大数据、高并发、分布式场景

NoSQL分类

NoSQL与关系型数据库对比

Redis

Redis与Memcache

Redis数据类型

redis数据类型包括:String(字符串)、Hash(字典)、List(列表)、Set(集合)、Sorted Set(Zset有序集合),其中Zset主要可以用于排行榜场景

Redis数据淘汰算法

Redis持久化

redis持久化有两种方式:RDB和AOF

RDB:借鉴传统数据库中快照的思想,指定时间间隔将数据进行快照存储

AOF:把每条改变数据集的命令追加到AOF文件末尾

Redis允许同时启用RDB和AOF持久化,这种方式能够兼顾性能和数据安全性,AOF 重写时,先写 RDB 全量数据,再追加增量命令。

Redis主从同步

初次全量同步

  • 从节点发送 PSYNC 命令请求同步
  • 主节点 bgsave 生成 RDB 快照,同时缓存新的写命令
  • 主节点将 RDB 发送给从节点
  • 从节点清空数据,加载 RDB
  • 主节点将缓存的增量命令发送给从节点
  • 从节点执行命令,完成全量同步

    后续增量同步
  • 主节点每执行一个写命令,就异步发送给从节点
  • 使用 复制偏移量、复制积压缓冲区、运行 ID 保证同步

缓存与数据库同步

cache-aside模式

读:先读缓存,缓存命中直接返回;缓存miss读取数据库,同时放入缓存

写:先更新数据库,再直接删除缓存

异步队列同步方案

使用kafka等消息队列,将数据库更新事件异步传递给Redis进行缓存更新,mysql写入后,发送更新事件到消息队列,消费者从消息队列消费消息从而更新redis

Binlog解析同步方案

使用canal工具监听mysql的binlog日志,将数据库的增删改操作同步到redis

缓存常见问题

缓存雪崩

缓存雪崩是指:大量缓存同一时间集体失效(比如一批缓存过期时间一样,到点全部失效,或者redis宕机),导致所有请求全部打到数据库,数据库压力暴增甚至宕机

解决方案

  1. 过期时间增加随机值
  2. 开启多级缓存,比如本地缓存+Redis缓存
  3. 使用锁或队列:保证不会有大量线程同时对数据库进行读写,从而避免缓存失效时大量并发请求落到底层数据库

缓存穿透

缓存穿透是指查询根本不存在的数据,即缓存中没有,数据库也没有,请求每次都穿透到DB

解决方案

  1. 缓存空值:针对查询不存在的数据,缓存null同时设置较短的过期时间
  2. 布隆过滤器:将所有可能存在的key进行哈希映射,查询前先检查布隆过滤器是否key存在,如果key不存在,则直接返回空结果;如果key存在,则查询缓存或数据库

布隆过滤器:是一个很长的二进制向量和一系列随机映射函数。布隆过滤器可以用于检索一个元素是否在一个集合中。

优点:空间效率和查询时间都比一般的算法要好得多

缺点:有一定的误识别率和删除困难。

缓存击穿

缓存击穿是指一个热点key突然过期,大量并发请求同时击穿到数据库,与雪崩的区别:雪崩是大量key,击穿是单个热点key

解决方案

  1. 热点key用不过期
  2. 加互斥锁:只允许一个线程去数据库查询并重建缓存
相关推荐
代码丰12 小时前
大 JSON 放进 Redis 之后,如何用 Stream 解耦耗时任务?
redis·后端·系统架构
一枕槐安48713 小时前
RAG 服务扛住高并发:缓存、队列、限流三件套
java·spring·缓存·异步任务·rag·断路器
枫子有风15 小时前
卡码网盘项目深挖
java·redis·jwt·es·pgvector
福大大架构师每日一题16 小时前
redis 8.10.3正式发布:聚焦集群总线超大消息传播场景的安全修复,8.10.3 Latest更新解读
数据库·redis·安全
江屿风18 小时前
【Plain Language Large Model】【从麦当劳点餐到Redis接入:MCP如何让AI工具集成变简单】流食般投喂
人工智能·redis·笔记·语言模型·llm·mcp
码智社19 小时前
Redis 哨兵模式详解:从原理到生产实践
java·redis
与数据交流的路上21 小时前
一次 redis 幽灵内存的分析
数据库·redis·缓存
无心水21 小时前
15、云原生架构设计理论与实践 核心考点与学习笔记
笔记·学习·云原生·架构师·软考·系统架构设计师·软考系统架构设计师
Geek-Chow21 小时前
06 · DeepSeek V4.1 Flash 推理端到端走查:一个 Agent 请求穿过 recipe、KV 缓存、Prefill 与 Decode
缓存
前进的李工1 天前
Agent 学习笔记 04:KV Cache 与上下文缓存
笔记·学习·缓存·agent·注意力机制·kv cache·prompt cache