跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像AI 生图工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
编程语言Node.jsjava算法

Redis 五大核心数据结构详解与应用

Redis 提供五种基础数据结构:String、Hash、List、Set 和 Sorted Set。每种类型针对特定业务场景优化,例如缓存、计数器、消息队列、去重及排行榜。内容涵盖底层原理、常用命令、实战案例及面试高频考点,帮助开发者根据需求选择合适的数据模型。

活在当下发布于 2026/3/30更新于 2026/7/2330 浏览
Redis 五大核心数据结构详解与应用

Redis 数据结构详解

概述

Redis 不仅仅是一个简单的 KV 存储,其内部丰富的数据结构设计是支撑高性能场景的关键。理解每种类型的底层原理与适用边界,能帮助我们在实际项目中做出更优的技术选型。

核心目标
  • 掌握五种基本数据类型的操作命令
  • 理解各类型在业务中的典型应用场景
  • 能够根据需求灵活组合使用

一、String(字符串)

这是最基础也是最常用的类型,支持文本或二进制数据存储。

常用命令
命令功能示例
SET key value设置键值对SET name "老曹"
GET key获取指定键的值GET name → "老曹"
INCR key自增 1(仅限数字)INCR age
DECR key自减 1(仅限数字)DECR score
APPEND key value追加内容到末尾APPEND msg "你好世界"
典型场景
  • 计数器:页面浏览次数统计
  • 缓存:临时存放网页片段或 API 结果
  • 分布式锁:利用 SETNX 实现互斥访问

二、Hash(哈希表)

类似于对象映射关系,适合保存对象属性集合。

常用命令
命令功能示例
HSET key field value设置字段值HSET user:id1001 name "张三"
HGET key field获取某个字段值HGET user:id1001 name → "张三"
HMSET key field1 val1 [field2 val2 ...]批量设值HMSET user:id1001 name "李四" age 25
HGETALL key获取全部字段及其值HGETALL user:id1001
HDEL key field [field ...]删除一个或多个字段
HDEL user:id1001 age
典型场景
  • 用户资料管理:每个用户 ID 对应一条记录
  • 购物车信息:商品编号 => 数量 映射关系
  • 配置项存储:系统参数集中存放便于修改

三、List(列表)

基于双向链表结构,支持从两端插入和弹出元素。

常用命令
命令功能示例
LPUSH key value [value ...]左侧推入LPUSH tasks task1 task2
RPUSH key value [value ...]右侧推入RPUSH messages hello world
LPOP key左侧弹出LPOP tasks
RPOP key右侧弹出RPOP messages
LRANGE key start stop查看范围内的元素LRANGE tasks 0 -1
典型场景
  • 消息队列:生产者消费者模式经典实现
  • 最新 N 条记录缓存:如微博动态流展示
  • 任务调度系统:待处理作业排队等候执行

四、Set(无序集合)

不允许重复成员存在,内部采用哈希表实现去重逻辑。

常用命令
命令功能示例
SADD key member [member ...]添加成员SADD tags python java c++
SMEMBERS key显示所有成员SMEMBERS tags
SISMEMBER key member判断是否包含某成员SISMEMBER tags python
SREM key member [member ...]移除成员SREM tags java
SCARD key返回集合大小SCARD tags
典型场景
  • 共同好友查找:两个用户的兴趣标签交集运算
  • 抽奖活动候选池构建
  • 黑名单过滤机制

五、Sorted Set(有序集合)

在普通 Set 基础上增加了权重排序功能,非常适合做排行榜等业务。

常用命令
命令功能示例
ZADD key score member [score member ...]添加带分数的成员ZADD leaderboard 100 alice 200 bob
ZRANGE key start stop [WITHSCORES]正向获取排名区间ZRANGE leaderboard 0 9 WITHSCORES
ZREVRANGE key start stop [WITHSCORES]逆向获取排名区间ZREVRANGE leaderboard 0 9 WITHSCORES
ZSCORE key member查询特定成员得分ZSCORE leaderboard alice
ZREM key member [member ...]删除成员ZREM leaderboard bob
典型场景
  • 积分排行榜:游戏玩家等级榜单
  • 热门文章推荐:根据点赞数倒序排列
  • 地理位置服务:附近的人搜索基于距离远近排序

六、综合实战演练

假设我们要开发一款在线问答社区,可以这样组合使用数据结构:

  1. 用户基本信息 → Hash
  2. 用户发表的问题列表 → List
  3. 问题的关注者集合 → Set
  4. 最受欢迎问题排行榜 → Sorted Set

具体实现逻辑如下(伪代码):

# 创建用户档案
redis.hset("user:1", mapping={
    "username": "Alice",
    "email": "[email protected]"
})

# 发布新问题
question_id = redis.incr("global:question_id")
redis.lpush(f"user:{user_id}:questions", question_id)
redis.hmset(f"question:{question_id}", {
    "title": title,
    "content": content,
    "author_id": user_id
})

# 关注问题
redis.sadd(f"question:{question_id}:followers", follower_id)

# 投票加分
redis.zincrby("popular_questions", 1, question_id)

通过这种组合,我们可以清晰地分离数据模型,提升系统的可维护性。


七、面试高频考点

序号问题解析
1Redis 中 String 类型最大能存多少数据?默认最大 512MB
2Hash 和 Set 在底层分别用了什么数据结构?Hash 用的是压缩列表或哈希表;Set 通常是整数集合或哈希表
3List 类型支持随机访问吗?不支持,只能从头尾两端操作
4ZSet 怎么做到既能快速查找又能维持顺序?跳跃表 + 字典双重索引结构
5如果要设计一个支持撤回的消息系统你会怎么做?利用 List 存储历史消息,每次撤回就从右边 POP 出来即可

八、性能特征总结

数据类型时间复杂度主要用途
StringO(1)缓存、计数器
HashO(1)对象存储
ListO(N) for range ops队列、栈
SetO(1) average去重、集合运算
Sorted SetO(log N)排行榜、优先级队列

掌握这些核心结构及其特性,是深入理解 Redis 性能表现的基础。在实际开发中,建议先明确业务需求,再选择最合适的数据模型,避免过度设计。

目录

  1. Redis 数据结构详解
  2. 概述
  3. 核心目标
  4. 一、String(字符串)
  5. 常用命令
  6. 典型场景
  7. 二、Hash(哈希表)
  8. 常用命令
  9. 典型场景
  10. 三、List(列表)
  11. 常用命令
  12. 典型场景
  13. 四、Set(无序集合)
  14. 常用命令
  15. 典型场景
  16. 五、Sorted Set(有序集合)
  17. 常用命令
  18. 典型场景
  19. 六、综合实战演练
  20. 创建用户档案
  21. 发布新问题
  22. 关注问题
  23. 投票加分
  24. 七、面试高频考点
  25. 八、性能特征总结
  • 免费图片AI生成工具免费生成了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 免费图片视频在线生成30秒,将你的创意变成现实开始设计
  • X/Twitter免费视频下载器免登陆无限额度免费视频解析下载了解详情
  • 100+免费在线小游戏爽一把
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • 2025 年秋招 LLM 及多模态模型面试精华
  • 区块链共识算法:时间长河(Time River Consensus)
  • Claude Code 核心执行模式详解:权限、计划与自动编辑
  • C++ 哈希表原理及 unordered_set/map 应用
  • 海尔智能家居集成:基于 HomeAssistant 的全屋智能控制方案
  • DeepSeek R1 论文核心机制与实验解析
  • 转行网络安全行业能提高收入吗?
  • Node.js 22 安装失败排查与 NVM 配置优化指南
  • AI 编程 Spec Coding 标准化工作流详解
  • GLM-4.6V-Flash-WEB 视觉大模型网页推理部署指南
  • 前端权限管理实战:从设计到落地的完整方案
  • 非机器学习人员入门:深入理解 Embedding 技术
  • 成为黑客的 12 个基本步骤与核心技能指南
  • OpenClaw 智能体框架环境搭建与模型接入指南
  • IntelliJ IDEA 中 Git 推送避免重复输入用户名密码
  • 开源 IP 地址管理工具 phpIPAM 安装与使用指南
  • LangChain 实战:URL 加载与网页内容爬虫封装
  • Agent 反思工作流框架 Reflexion 中篇:ReactAgent 实现与原理详解
  • 若依 (RuoYi) 低代码框架深度剖析:架构、优劣与选型
  • 基于 Q-Learning 的无人机三维动态避障路径规划与 Matlab 实现

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

  • Keycode 信息

    查找任何按下的键的javascript键代码、代码、位置和修饰符。 在线工具,Keycode 信息在线工具,online

  • Escape 与 Native 编解码

    JavaScript 字符串转义/反转义;Java 风格 \uXXXX(Native2Ascii)编码与解码。 在线工具,Escape 与 Native 编解码在线工具,online

  • JavaScript / HTML 格式化

    使用 Prettier 在浏览器内格式化 JavaScript 或 HTML 片段。 在线工具,JavaScript / HTML 格式化在线工具,online

  • JavaScript 压缩与混淆

    Terser 压缩、变量名混淆,或 javascript-obfuscator 高强度混淆(体积会增大)。 在线工具,JavaScript 压缩与混淆在线工具,online

  • Gemini 图片去水印

    基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online