Redis 的基础数据结构有哪些,各自用于什么场景?
未标记
考查重点:数据类型与业务操作匹配。String 做值缓存/计数,Hash 按字段改对象,List 做顺序队列,Set 去重,ZSet 按分数排行
本题目录
参考答案
核心回答
Redis 常见的五种基础数据类型是 String、Hash、List、Set 和 Sorted Set(Zset)。选择时看需要怎样访问和修改数据:
String:保存一个字节串,适合缓存整份JSON、保存令牌或使用原子自增计数。Hash:在一个键下组织多组字段和值,适合用户信息、商品属性、购物车等需要按字段读写的对象。List:有顺序、允许重复的字符串序列,支持两端插入和弹出,适合近期记录、简单待处理列表等。Set:无序且成员唯一,支持成员判断和交并差,适合去重、标签集合、共同关注。Zset:成员唯一,每个成员关联一个分数,适合按分数排序、取排名或查范围,例如积分榜和按时间排序的任务索引。
这里说的是对外的数据模型,不等于底层编码。Redis 也有 Bitmap、HyperLogLog、GEO、Stream 等其他能力,不能把“五种基础类型”理解成所有版本只有五种类型。
对象缓存:String 和 Hash 怎么选?
如果商品详情通常整份读取、整份更新,可以把序列化 JSON 存成 String,读写方式简单。但 Redis 把这份 JSON 当字节串,普通 String 命令不会按 JSON 路径理解内部字段。
如果经常只读取名称、修改库存展示值或更新某个属性,Hash 可以直接按字段访问,减少整份对象的传输和序列化。购物车也可以把商品 ID 作为 field、数量作为 value,利用字段更新和增量操作管理内容。
两种方式都不是普遍更省内存:字段数量、内容长度、底层编码、键的组织方式都会影响占用。Hash 也不是任意嵌套的对象数据库,复杂结构仍需要合适的序列化或其他模型。
并发修改时还要考虑动作本身。多个客户端分别读整份 JSON、修改不同字段再覆盖,可能互相丢失更新;按字段操作可以缩小影响范围,但涉及多个字段的业务条件,仍要使用合适的原子操作或并发控制。
List、Set 和 Zset 的“顺序”有什么不同?
List 的顺序由插入位置和后续操作决定,成员可以重复。 例如聊天消息按一端写入,再按约定顺序读取历史。两端操作是常用优势;按位置查找、取大范围记录仍有遍历与返回成本,不能把所有操作都当成常数时间。
Set 不承诺插入顺序,也不保存重复成员。 比如每个用户的关注人集合,可以做成员判断或求共同关注。适合“有没有、是否重复、两个集合有什么关系”,不适合直接表达先后顺序或分数排名。
Zset 的成员唯一,但分数可以相同。 同分时按成员的字节字典序进一步排序;如果要按“谁先达到分数”决定名次,需要另行表达该业务规则,不能默认同分按写入先后排序。更新同一成员的分数,会调整它的位置,不会自动增加一份相同成员。
例如积分榜用 Zset 能直接查名次和分数范围,用 List 则需要自己维护位置;反过来,完整记录每次积分变更事件时,不能只靠 Zset 中该成员当前的一项分数代替历史。
什么时候考虑 Bitmap、HyperLogLog 和 GEO?
它们服务于更具体的查询需求:
Bitmap:用位表示某对象的某个二值状态,例如签到或是否活跃。它是在String上进行的位操作;偏移很大而对象很稀疏时,不一定省空间。HyperLogLog:估算去重后的数量,例如访问用户数。它不保存可供逐个取回的完整成员集合,不适合要求精确名单或精确去重数的场景。GEO:按地理位置查询附近成员、计算距离等;它提供地理语义,不等于任意复杂空间分析数据库。
如果需要可重复读取的事件记录或消费组等能力,可以进一步比较 Stream。用 List 弹出一个元素,只代表它已从列表取走,不自动代表对应业务已处理成功;消息可靠性还涉及确认、重试与持久化等设计。
常见追问
为什么计数用 INCR,不先 GET 再 SET? 单条自增在 Redis 中原子完成,避免多个客户端读到相同旧值后相互覆盖。若计数还要和过期、额度或外部扣款一起形成业务动作,仍需分析这些操作之间的原子范围。
Redis Hash 与整个 Redis 的键空间有什么区别? 键空间是键到 Redis 对象的映射,值可以是 String、List、Hash 等;Hash 则是某一个键对应的字段集合。不能因为都涉及映射,就把所有 Redis 值都叫 Hash。
同一种类型为什么还会有多种底层结构? Redis 会根据版本、数据规模和配置选择紧凑编码或其他结构,平衡内存与访问开销。面试先说明对外语义和主要操作,再按具体版本展开实现;不要把历史版本的编码表当成永远不变的对应关系。
对应教程
- 第 16 章:记忆与对话历史:§5.2.4~5.2.6 展示按 session 保存序列化消息、查看类型和读取列表的场景,帮助理解“历史消息”怎样落到实际数据类型;其他类型的选型由本文补充。
参考资料
- 国内:JavaGuide:Redis 5 种基本数据类型详解:借鉴五种类型的操作和应用场景,组织正文中 String、Hash、List、Set 与 Zset 的数据模型和选型说明。
- 国内:JavaGuide:Redis 3 种特殊数据类型详解:采用签到、近似去重计数与地理位置的例子,解释正文中 Bitmap、HyperLogLog、GEO 分别保留的信息和适用查询。
- 国内:小林 coding:Redis 常见数据类型和应用场景:参考对象缓存、购物车和列表消费的讨论,比较正文中整份 JSON 与按字段读写的取舍,并说明弹出列表元素与业务处理完成的区别。
- 国外:Redis:Strings:字节串与原子计数部分明确 String 保存的是什么,以及为什么自增与客户端先读再写具有不同的并发行为。
- 国外:Redis:Sorted sets:成员唯一、分数排序与同分字典序的约定,说明积分榜怎样排序,以及为何不能默认同分按插入时间排列。
相关面经
59 篇腾讯云智
后台开发redis有哪些数据结构?
华鲲振宇
AI 开发redis有哪些数据结构?项目中用的什么?
公司未注明
Java 后端开发工程师Redis 常见数据类型及核心业务场景?
百度
Agent 开发工程师redis数据结构讲一下
东方财富
服务端开发工程师(AI应用开发方向)介绍一下对 Redis 的理解,可以从基础知识、使用场景或实际使用经验展开。
展开剩余 54 篇面经
麒麟软件
后端研发工程师Redis 有哪些常见的数据类型?
公司未注明
后端开发工程师Redis等中间件的使用是你自己实操的吗?请列举你用到的Redis数据结构及其应用场景。
亚信科技
后端开发Redis 支持哪些数据结构?底层有什么优化机制?
网易云音乐
全栈开发 / 后端开发实习常用基本数据类型?
顺丰
AI 全栈Redis你在之前项目里用在哪些方面?
快手
后端开发工程师redis有哪些数据类型?
公司未注明
测试开发岗Redis常用数据结构,什么场景会出现大key,大key带来什么风险。
美团
Agent 开发Redis在Java开发中的作用、适用场景,底层原理考量?
恒生电子
AI应用开发Redis 基础:Redis 有哪几种数据结构?
客诺信息技术
后端开发工程师快手
测试开发redis知道吗,讲讲你熟悉的(三大缓存、主从复制AOF RDB区别)
腾讯
后端开发工程师Redis 的基础数据类型以及底层实现原理了解吗?
靖安科技
后端工程师(RAG/Agent 项目)Redis 有几种数据结构
字节跳动、米哈游、哔哩哔哩、百度、美团、智驾新程、CVTE
Redis 有哪些常见数据结构?
快手
测试开发实习生Redis 的数据存储结构有哪几种
百度
后端开发redis有哪些数据结构
乐元素
后端开发问了 Redis 除了 ZSet、List 之外还用过什么结构。
他山科技
机器人数据采集平台开发Redis 用了哪种数据结构,主要记什么数据,key 是什么样的?
哔哩哔哩、百度、腾讯
Redis 用过哪些数据结构?各自适用什么场景?
公司未注明
后端开发Redis 有哪些常见的数据类型?分别有哪些应用场景?
知乎
全栈开发工程师redis的数据结构有哪些
公司未注明
Agent 开发Redis 在项目里具体用了什么?
小红书
AI后端开发Redis一共有哪些数据结构?
小红书
快手
Agent 开发他问了Go channel是不是并发安全,channel和mutex的区别,GMP调度,本地队列为空时怎么偷任务。然后又问Redis为什么快、支持哪些数据结构、怎么做类似淘宝搜索框的实时模糊搜索。最后还问了扫码登录完整流程、服务注册发现、Nacos/Consul心跳。
小红书
Agent 开发Redis有哪些常见数据结构?不同数据结构底层实现原理分别是什么?
字节跳动
全栈开发redis常用数据结构与实际项目中你一般怎么用
知乎
后端开发redis的数据结构应用场景,你怎么选择的
字节跳动
后端开发工程师讲一讲 redis 的常用数据结构?
百度
后端开发12 redis数据类型及底层实现
滴滴
AI Agent 后端开发Redis 支持哪些数据结构?
字节跳动
后端开发工程师(AI / Agent 方向)Redis底层基础数据结构有哪些,各自用途?
公司未注明
AI 开发Redis之前有接触过吗?你用Redis的时候,了解过它有哪些数据结构吗?还是说你们当时就只是当字符串直接存进去、取出来?
原力健康
Agent开发基础数据结构了解吗?
阿里巴巴
后端开发Redis的常用数据类型有哪些?分别适用什么场景?
公司未注明
Java 后端说一下redis的数据结构和应用场景
用友、太平洋网络
redis基本数据结构哪些+运用场景,
美团
开发项目中用到过Redis吗?Redis常用数据类型有哪些?
阿里巴巴
后端开发工程师(AI)Redis的常用数据类型有哪些?分别适用什么场景?
美团
全栈开发工程师redis的基础数据类型
阿里国际
AI 应用开发Redis的数据类型以及使用场景
美团
后端开发工程师Redis 支持哪些数据类型?
百度
智能体开发Redis是什么,主要作用
重庆开源共创科技
Redis 的数据结构有哪些?
蚂蚁集团
AI Infraredis缓存了什么数据?是什么类型的?key和val分别是什么?列表内部的数据究竟是什么?有没有涉及到序列化啥的?
京东
AI 后端开发Redis常见数据结构,Zset有哪些使用场景
字节跳动
redis数据类型和应用场景?
京东
AI 应用开发实习生我看到你写用到了Zset,能给我讲一下怎么用的吗?
公司未注明
Go 后端开发Redis 常用数据类型及适用场景
龙旗科技
Java 开发Redis数据类型有哪些
腾讯
后台开发redis是用来K-V存储,除此之外你还知道别的吗?
字节跳动
后端开发(Agent 方向)Redis支持哪些数据结构
字节跳动
Java 后端开发redis中常见的数据结构有哪些?
字节跳动
后端开发工程师Redis 常见的五种数据结构是什么?
















