news 2026/7/24 1:26:16

腾讯面试官经常问的问题:Redis 为什么能快到飞起?搞懂这 5 种核心数据结构,你就掌握了 Redis 高性能的秘密!

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
腾讯面试官经常问的问题:Redis 为什么能快到飞起?搞懂这 5 种核心数据结构,你就掌握了 Redis 高性能的秘密!

🚀Redis 为什么能快到飞起?搞懂这 5 种核心数据结构,你就掌握了 Redis 高性能的秘密!

很多 Java 后端开发者都会使用 Redis:

redisTemplate.opsForValue().set("user:1",user);

但是面试官继续问:

Redis 有哪些数据结构?底层为什么这么设计?分别适用于什么场景?

很多人只能回答:

String、List、Set、Hash、ZSet。

这个答案只能拿基础分。

真正理解 Redis,需要知道:

  • 每种数据结构解决什么问题?
  • 什么时候使用?
  • 底层为什么快?

今天一篇文章彻底搞懂 Redis 五大核心数据结构。


一、Redis 为什么这么快?

在了解数据结构之前,先理解 Redis 的设计思想。

Redis 高性能主要来自:

1. 基于内存存储

传统数据库:

磁盘 ↓ 读取数据

速度较慢。

Redis:

内存 ↓ 直接访问

速度非常快。


2. 单线程事件模型

Redis 核心命令执行采用单线程:

请求1 请求2 请求3 ↓ Redis线程依次执行

避免:

  • 线程切换
  • 锁竞争

3. 高效的数据结构

Redis 没有简单使用 Java 集合。

而是自己设计:

  • SDS
  • ziplist
  • quicklist
  • skiplist

等底层结构。


二、Redis 五大基本数据结构

Redis 常用数据结构:

数据结构特点典型应用
String字符串缓存、计数器
Hash键值对集合对象存储
List列表消息队列
Set无序集合标签、去重
ZSet有序集合排行榜

下面详细介绍。


一、String:最常用的数据结构

1. 什么是 String?

String:

就是字符串类型。

例如:

key: user:name value: Tom

Redis:

SET user:name Tom

获取:

GET user:name

结果:

Tom

2. String 能存什么?

不仅仅是字符串。

还可以存:

数字

例如:

SET count100

增加:

INCR count

结果:

101

JSON对象

例如:

{"id":1,"name":"Tom"}

转换成字符串存储。


String 应用场景

1. 缓存

例如:

数据库:

MySQL 用户信息

缓存:

Redis user:1001

查询:

请求 ↓ Redis ↓ 没有 ↓ MySQL

2. 计数器

例如:

文章点赞:

INCR article:like:1001

3. 分布式锁

例如:

SET lock:user:1trueNX EX10

二、Hash:存储对象

1. 什么是 Hash?

Hash 类似:

Java 中:

Map<String,Object>

例如用户:

user:1001 name = Tom age = 20 address = Beijing

Redis:

HSET user:1001 name Tom HSET user:1001 age20

查询:

HGET user:1001 name

返回:

Tom

Hash 应用场景

存储对象信息

例如:

用户:

{"name":"Tom","age":20}

可以:

Redis Hash user:1001 name Tom age 20

优点:

修改一个字段:

不用重新存整个对象。


三、List:列表结构

1. 什么是 List?

List:

类似 Java:

LinkedList

特点:

  • 有序
  • 可重复

例如:

A B C

Redis:

左边插入:

LPUSH list A

右边弹出:

RPOP list

List 应用场景

1. 消息队列

例如:

生产者:

订单服务 ↓ Redis List ↓ 消费者

流程:

生产消息 LPUSH 消费消息 RPOP

2. 最新消息列表

例如:

微博:

最新动态。


四、Set:无序集合

1. 什么是 Set?

Set:

类似 Java:

HashSet

特点:

  • 无序
  • 不重复

例如:

用户标签: Java Redis Spring

添加:

SADD user:tag Java

Set 应用场景

1. 去重

例如:

统计访问用户:

user1 user2 user1

Set:

自动去重。


2. 共同好友

例如:

用户A:

张三 李四 王五

用户B:

李四 王五 赵六

求共同好友:

SINTER userA userB

结果:

李四 王五

五、ZSet:有序集合(重点)

1. 什么是 ZSet?

ZSet:

Sorted Set。

特点:

有序 + 不重复。

它比 Set 多一个:

score(分数)


例如排行榜:

用户 分数 Tom 100 Jack 90 Lucy 80

Redis:

ZADD rank100Tom

查询排名:

ZRANGE rank010

ZSet 应用场景

1. 排行榜

例如:

游戏排名:

玩家积分排行榜

2. 热门文章

文章:

score:

代表:

阅读量。


六、Redis 数据结构底层实现

面试高级问题:

Redis 五种数据结构底层是什么?


String

底层:

SDS:

(Simple Dynamic String)

优势:

  • 获取长度快
  • 二进制安全
  • 扩容方便

Hash

底层:

根据数据量:

可能使用:

  • ziplist
  • listpack
  • hash table

List

底层:

以前:

ziplist

后来:

quicklist


Set

底层:

  • hash table
  • intset

ZSet

底层:

  • skiplist(跳表)
  • hash table

七、Redis 常见数据结构选择

实际开发:

需求选择
缓存对象String / Hash
计数String
点赞数量String
用户信息Hash
消息队列List
去重统计Set
共同好友Set
排行榜ZSet
热点排行ZSet

八、面试最终回答

如果面试官问:

Redis 有哪些数据结构?

可以这样回答:

Redis 常用的数据结构主要有五种:String、Hash、List、Set 和 ZSet。String 常用于缓存和计数器;Hash 适合存储对象;List 可以实现消息队列;Set 用于去重和集合运算;ZSet 通过 score 实现排序,常用于排行榜。Redis 底层针对不同场景设计了 SDS、HashTable、QuickList、SkipList 等高效结构,因此能够实现高性能的数据访问。


最后一句话记忆:

String:存一个值 Hash:存一个对象 List:存一串数据 Set:存不重复数据 ZSet:带排名的数据

掌握这五种数据结构,你就掌握了 Redis 80% 的日常使用场景。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/24 1:25:57

AI论文写作工具全流程测评与自考论文优化方案

1. 项目背景与核心价值去年帮表弟改自考论文时&#xff0c;我深刻体会到学术资源获取的门槛。非全日制学生没有校园网权限&#xff0c;知网下载一篇论文动辄几十元&#xff0c;开题阶段查文献就能花掉半个月生活费。这促使我系统测评了市面上主流的AI论文工具&#xff0c;实测发…

作者头像 李华
网站建设 2026/7/24 1:25:55

MSPM0 I2C模块深度解析:从协议基础到高级应用实战

1. 项目概述与I2C总线核心价值在嵌入式系统开发中&#xff0c;如何用最少的硬件资源连接多个外设&#xff0c;一直是个既基础又关键的课题。I2C总线协议&#xff0c;全称Inter-Integrated Circuit&#xff0c;就是为解决这个问题而生的经典方案。它仅凭两根线——串行数据线SDA…

作者头像 李华
网站建设 2026/7/24 1:25:23

深入解析MSPM0定时器:从通用TIMG到高级TIMA的架构与应用

1. 定时器&#xff1a;嵌入式系统的“心跳”与“节拍器” 在嵌入式系统的世界里&#xff0c;如果说CPU是大脑&#xff0c;那么定时器就是维持系统生命节律的“心脏”和“节拍器”。无论是精确测量一个按键按下的时长&#xff0c;还是生成驱动电机的PWM波形&#xff0c;亦或是周…

作者头像 李华
网站建设 2026/7/24 1:20:39

深入解析MSPM0 UNICOMM-UART:从基础原理到高级应用实战

1. 项目概述与核心价值在嵌入式开发的世界里&#xff0c;串行通信是连接微控制器与外部世界的“血管”。无论是调试信息输出、传感器数据采集&#xff0c;还是模块间的指令交互&#xff0c;一个可靠、高效的串行接口都至关重要。而通用异步收发传输器&#xff08;UART&#xff…

作者头像 李华
网站建设 2026/7/24 1:15:20

零代码构建企业知识库问答系统的30分钟实践指南

1. 项目概述&#xff1a;零代码构建企业知识库问答系统最近半年&#xff0c;我帮7家中小型企业部署了基于大模型的知识库系统&#xff0c;发现90%的客户都存在相同痛点&#xff1a;技术团队资源有限&#xff0c;但急需将分散的文档、邮件、表格等知识资产转化为可即时查询的智能…

作者头像 李华
网站建设 2026/7/24 1:14:55

2024年Cypress前端自动化测试实战:从架构优势到CI/CD集成

1. 项目概述&#xff1a;为什么2024年我们依然需要Cypress&#xff1f;如果你是一名前端开发者&#xff0c;或者正在向全栈转型&#xff0c;那么“自动化测试”这个词对你来说一定不陌生。从早期的Selenium WebDriver&#xff0c;到后来的Puppeteer、Playwright&#xff0c;测试…

作者头像 李华