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

【系统架构设计师-Redis(2)】Redis 五大核心数据结构与典型场景实战(含秒杀、限流、队列、排行榜)

发布时间:2026/11/3 9:53:58 来源:云帆数科 栏目:资讯中心
【系统架构设计师-Redis(2)】Redis 五大核心数据结构与典型场景实战(含秒杀、限流、队列、排行榜)
文章目录一、Redis 五大核心数据结构深度解析1、String字符串万能的键值存储2、Hash哈希对象存储的最佳选择3、List列表双向链表与消息队列4、Set集合无序去重与集合运算5、Sorted Set有序集合排行榜与延迟队列二、Redis 高级数据结构应对海量数据与地理位置1、HyperLogLog亿级基数统计2、Geo地理位置LBS 应用的基础3、Streams流轻量级持久化消息队列三、软考架构师核心考点与真题实战1、真题模拟电商秒杀系统设计2、真题模拟Redis vs Memcached 技术选型本文基于《Redis Deep Dive》及软考系统架构设计师考试大纲聚焦 Redis 的数据结构与可直接套用的实战场景。一、Redis 五大核心数据结构深度解析Redis 的丰富数据结构是其区别于 Memcached 的核心优势。1、String字符串万能的键值存储简单说明这是 Redis 最基础的数据类型你可以把它当成一个“万能盒子”里面可以存任何文本、数字甚至是图片数据二进制安全。常用命令SET key value存数据。GET key取数据。INCR key让数字加 1。典型场景缓存SET key value(如用户 Session, HTML 片段)。计数器INCR article:views:1001(原子递增不仅限于 1)。INCRRedis 会自动识别这是数字并让它加 1多线程并发调用也不会出错。分布式锁SETNX lock_key unique_value EX 10(防止死锁)。SETNX(SET if Not Exists)只有当 key 不存在时才设置成功抢锁EX 10设置 10秒过期时间防止抢到锁的进程挂了锁永远不释放。位图 (Bitmap)SETBIT user:sign:202310 1 1(用户签到极大节省空间)。SETBIT直接修改二进制位。比如把第 1 天的位设为 1已签到一年 365 天也只需要 365 个 bit不到 50 字节。2、Hash哈希对象存储的最佳选择简单说明类似于编程语言中的 Map 或 Object适合存储对象。你可以把它想象成一个文件夹文件夹名字是 Key里面可以存很多文件字段 Field 和值 Value。常用命令HSET key field value存某个字段。HGET key field取某个字段。HGETALL key取出所有字段和值。典型场景对象存储存储用户信息ID, Name, Age。相比 String 序列化 JSONHash 可以单独修改字段且 ZipList 编码更省内存。HMSET user:1001 name ZhangSan age 18一次设置多个字段。这里user:1001是Key整个 Hash 的名字就像文件夹名。name和age是Field字段就像文件名。ZhangSan和18是Value值就像文件内容。HINCRBY user:1001 age 1只让年龄加 1不影响名字。购物车HSET cart:1001 item_id count。Key 是用户 IDField 是商品 IDValue 是数量。HGET cart:1001 10086查看商品 10086 买了几个。HDEL cart:1001 10086删除这个商品。3、List列表双向链表与消息队列简单说明一个双向链表可以从左边进也可以从右边进。既可以当队列用先进先出也可以当栈用先进后出。常用命令LPUSH key value从左边塞数据。RPOP key从右边拿数据。LRANGE key 0 -1查看列表里的所有数据。典型场景消息队列LPUSHRPOP(简单队列)BRPOP(阻塞读取降低 CPU 消耗)。BRPOP queue:order 5尝试从队列拿数据如果没数据就等 5 秒Block避免一直空轮询浪费 CPU。最新 N 条数据LPUSHLTRIM(如微博 Timeline)。LPUSH timeline:user:1 new_post_id发新微博。LTRIM timeline:user:1 0 99只保留最新的 100 条旧的自动切掉。架构思考Redis List 作为队列的缺点是消息无法持久化重启丢失且不支持消费者组复杂场景应选 Streams 或 Kafka。4、Set集合无序去重与集合运算简单说明一个不重复的无序名单。你往里面丢一堆数据它会自动去重你还可以拿两个名单来做交集、并集运算。常用命令SADD key member添加元素自动去重。SMEMBERS key查看所有元素。SINTER key1 key2求两个集合的交集共同好友。典型场景标签系统 (Tags)SADD user:1:tags tech music。原因利用 Set 的去重特性保证同一个标签不会被重复添加同时可以用SINTER快速找出拥有相同标签的用户群。抽奖系统SRANDMEMBER(随机抽取)。原因Set 内部是无序的Redis 提供了原生命令可以高效地从集合中随机拿出一个或多个元素非常适合公平抽奖。社交关系SINTER(共同好友),SDIFF(推荐可能认识的人)。原因利用集合运算交集、差集、并集。比如“共同好友”就是求两个好友列表的交集“可能认识的人”就是求差集朋友的好友减去我的好友。5、Sorted Set有序集合排行榜与延迟队列简单说明也是去重集合但给每个元素带了一个“分数”Score。Redis 会根据这个分数自动帮你排好序非常适合做排行榜。常用命令ZADD key score member添加元素并设置分数。ZRANGE key 0 -1按分数从小到大排序查看。ZREVRANGE key 0 -1按分数从大到小排序查看排行榜常用。典型场景排行榜ZADD leaderboard 100 user1。ZINCRBY leaderboard 10 user1给 user1 加 10 分排名自动更新。ZREVRANGE leaderboard 0 9取出前 10 名Top 10。延时队列Score存储时间戳ZRANGEBYSCORE轮询到期任务。ZADD delay_queue 1700000000 task_id把任务的执行时间作为分数存进去。ZRANGEBYSCORE delay_queue 0 1699999999每秒轮询找出分数时间小于当前时间的任务去执行。时间窗限流滑动窗口算法。二、Redis 高级数据结构应对海量数据与地理位置1、HyperLogLog亿级基数统计原理概率统计算法用极小内存12KB统计海量基数。场景亿级 UV 统计。允许 0.81% 的误差。2、Geo地理位置LBS 应用的基础原理基于 Sorted Set (GeoHash 编码)。场景附近的人/车 (GEORADIUS)。3、Streams流轻量级持久化消息队列原理Log 结构支持 Consumer Groups。场景轻量级持久化消息队列解决 List 消息丢失问题。三、软考架构师核心考点与真题实战1、真题模拟电商秒杀系统设计问题如何利用 Redis 应对秒杀场景的高并发流量解答思路页面缓存 (Page Cache)方案使用 Redis 缓存商品详情页的静态化内容如 HTML 片段或 JSON 数据Key 通常为product:detail:1001。评价这是非常经典且常用的方案。优点抗并发能力极强QPS 可达 10w远超数据库减少 DB 压力。演进对于超热点商品如 iPhone 首发Redis 可能会成为瓶颈热 Key 问题此时通常会在应用层再加一层本地缓存如 Guava Cache / Caffeine形成“多级缓存”架构。库存扣减利用DECR原子操作扣减库存防止超卖。或者使用 Lua 脚本保证Check-and-Set的原子性。限流利用INCREXPIRE实现固定窗口限流。利用List实现令牌桶算法 (Token Bucket)原理有一个后台程序可以是一个独立的定时任务脚本如 Python 脚本、Java 定时线程、Spring Schedule 等以恒定速度如每秒 100 个往 Redis List通道里LPUSH“令牌”门票。List 的长度有上限比如 200满了就多余的扔掉。请求来了先RPOP拿令牌拿到才能执行拿不到就排队或拒绝。为什么不直接给 200 个如果是直接给 200 个那是库存扣减秒杀用完就没了而令牌桶是限流通过匀速生产令牌来保证服务可以细水长流地持续运行。优势相比固定窗口令牌桶允许突发流量。比如平时没什么人通道里积攒了 200 张票突然来了一波高峰这 200 个请求可以瞬间被处理而不需要像漏桶算法那样强行排队。异步处理秒杀成功后将订单信息写入 RedisList或Streams后端服务异步消费入库MySQL削峰填谷。2、真题模拟Redis vs Memcached 技术选型问题为什么现在新系统多选择 Redis 而非 Memcached解答要点数据类型Redis 支持丰富的数据结构Hash, List, Set 等Memcached 仅支持 String。持久化Redis 支持 RDB/AOFMemcached 数据全在内存重启丢失。集群模式Redis 原生支持 ClusterMemcached 需要客户端实现分片。功能特性Redis 支持 Pub/Sub, Lua 脚本, Geo 等高级功能。

相关推荐

TabPFN-3终极指南:如何在5分钟内掌握这个革命性表格预测模型
TabPFN-3终极指南:如何在5分钟内掌握这个革命性表格预测模型

TabPFN-3终极指南:如何在5分钟内掌握这个革命性表格预测模型 你想知道如何快速上手最先进的表格预测模型吗?TabPFN-3作为一款基于Transformer架构的表格预测基础模型,通过上下文学习技术,能够在单次前向传播中解决复杂的表格预测… · 2026/11/3 9:53:58

LTX-Best-Face-ID vs 传统视频生成工具:为什么它是人脸保留的最佳选择
LTX-Best-Face-ID vs 传统视频生成工具:为什么它是人脸保留的最佳选择

LTX-Best-Face-ID vs 传统视频生成工具:为什么它是人脸保留的最佳选择 LTX-Best-Face-ID是一款基于LTX-2.3(22B)模型的身份保留参考转视频LoRA工具,它能根据人物参考照片和文本提示生成保持人物身份的视频。与传统视频生成工具相… · 2026/11/3 9:53:58

BBDown 下载 B 站视频完整指南:从单集视频到批量番剧的命令行工具
BBDown 下载 B 站视频完整指南:从单集视频到批量番剧的命令行工具

BBDown 下载 B 站视频完整指南:从单集视频到批量番剧的命令行工具 【免费下载链接】BBDown Bilibili Downloader. 一个命令行式哔哩哔哩下载器. 项目地址: https://gitcode.com/gh_mirrors/bb/BBDown BBDown 是一个免费开源的命令行 B 站视频下载器&#xff… · 2026/11/3 9:53:58

Chloe:基于多级向量化与控制路径缩减的全同态加密上的循环变换
Chloe:基于多级向量化与控制路径缩减的全同态加密上的循环变换

一、核心问题论文的核心问题是:现有 FHE 编译器对“非平凡循环结构”的支持不足,导致 FHE 上程序表达能力和执行效率受限。具体来说:FHE 允许在密文上计算,但密文计算与明文计算行为差异很大。逻辑电路、比较、分支等非算术操作在… · 2026/11/3 10:30:56

为什么自编码器与流模型不能拆开用?RFD4-Proteína匹配检查点对机制深度解析
为什么自编码器与流模型不能拆开用?RFD4-Proteína匹配检查点对机制深度解析

为什么自编码器与流模型不能拆开用?RFD4-Protena匹配检查点对机制深度解析 RFD4-Protena 是由 Baker Lab 与 NVIDIA GenAIR 联合发布的生物分子设计模型,能同时生成蛋白质序列与全原子结构。它的权重由流模型和自编码器两个检查点构成,官方强… · 2026/11/3 10:30:56

Z-Image-Turbo-FP8 原理揭秘:如何吃透 torchao 动态激活量化机制?
Z-Image-Turbo-FP8 原理揭秘:如何吃透 torchao 动态激活量化机制?

Z-Image-Turbo-FP8 原理揭秘:如何吃透 torchao 动态激活量化机制? Z-Image-Turbo-FP8 是基于 torchao 动态激活量化打造的 Z-Image-Turbo 文生图模型量化仓库:它把 6B 参数的 Diffusion Transformer 以 FP8 / INT8 两种低精度方案重新打包&a… · 2026/11/3 10:30:56

到综开放平台是什么,美团团购核销该从哪个入口申请, 无限聚核
到综开放平台是什么,美团团购核销该从哪个入口申请, 无限聚核

核销服务由无限聚核提供,美团、抖音团购核销一站式接入。想让门店在自己的收银、预约或点餐系统里核销美团团购券,第一步往往卡在找入口。搜「美团开放平台」「美团开发者中心」「到综开放平台」「到店综合开放平台」「北极星开放平台」,名字… · 2026/11/3 10:30:56

Codex 三强版一键部署包|免解压免配置,本地 AI 办公自动化完整实操
Codex 三强版一键部署包|免解压免配置,本地 AI 办公自动化完整实操

前言 这篇实操教程将带你完整落地 Codex 一键整合包。安装包免解压,省去了繁琐的环境部署步骤,即便是零基础的新手也能快速上手。它同时兼容 Windows 与 macOS 两大操作系统,只需跟随安装向导简单几步,即可完成程序安装、账号登录… · 2026/11/3 10:30:56

全网刷屏的“Agentic Thinking“是啥?拆开给你看:让AI从“嘴炮“变成会自己干活的老员工
全网刷屏的“Agentic Thinking“是啥?拆开给你看:让AI从“嘴炮“变成会自己干活的老员工

全网刷屏的"Agentic Thinking"是啥?拆开给你看:让AI从"嘴炮"变成会自己干活的老员工 最近科技圈有个词特别火——Agentic Thinking,翻译过来大致是"会主动思考的行动型AI"。不少博主都在聊一款叫 Nex-N2.5-Pro… · 2026/11/3 10:29:55

双极步进电机控制实战: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/3 6:04:24

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/3 5:52:46

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/3 6:04:24

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/3 5:52:46

了解更多?预约专属演示

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

企业微信二维码