当前位置: 首页 > news >正文

腾讯面试官经常问的问题: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% 的日常使用场景。

http://www.cnnetsun.cn/news/3610437.html

相关文章:

  • AI论文写作工具全流程测评与自考论文优化方案
  • MSPM0 I2C模块深度解析:从协议基础到高级应用实战
  • 深入解析MSPM0定时器:从通用TIMG到高级TIMA的架构与应用
  • 深入解析MSPM0 UNICOMM-UART:从基础原理到高级应用实战
  • 零代码构建企业知识库问答系统的30分钟实践指南
  • 2024年Cypress前端自动化测试实战:从架构优势到CI/CD集成
  • TVP5154A视频解码芯片硬件设计:电气规格、时序与热设计实战解析
  • 深度学习核心概念与实践指南:从神经网络到模型部署
  • doom3 代码结构
  • 【Android Performance】Vmpressure与LMKD协作机制详解——从内存压力公式到进程回收决策的完整链路
  • Python「假多态」与 C++「真多态」的核心区别
  • 从注射到口服:Lipfendra如何重塑高胆固醇血症长期管理的日常场景【海得康】
  • 上市公司公开财报数据采集:OpenClaw批量抓取年报数据,自动生成财务对比分析表
  • 基于Java的校园物品交易平台(Java+SSM+MySQL)| 计算机毕业设计 附源码论文PPT
  • 神经网络架构搜索与多智能体强化学习工业应用解析
  • AIO技术框架全链路解析:从LLM内容生成管道到智能分发引擎的架构设计与代码实现
  • 数字孪生 + AI,不只是“好看“,这 4 个场景有了质的突破
  • AI读得懂字面却读不懂业务,语义鸿沟才是企业AI落地的真门槛
  • 为什么企业AI总是用不起来?缺的是语义底座,不是模型
  • 刚做了人流适合吃什么好?人流术后饮食调理与科学修护指南
  • Android随笔-Handler的Message是什么结构
  • 价格、功能、操作、体验:报名签到查座等会务平台怎么选?看完这篇不纠结
  • AI-Thinker-WB2入门:windows环境配置与工程烧录
  • Python中str、list、tuple、dict、set 五大内置数据结构详解
  • 【雨云】12 元/月打造专属内网穿透:独享 IP、任意端口!
  • 【Java实战】Java加解密算法全解析:分类、场景与国密算法实战总结
  • 2026年做跨境电商,很多人不知道这3个隐形关联流量入口,正被头部大卖悄悄吃透(实战复盘)
  • 抖音黑科技兵马俑总站源头简博科技 | 抖音锚点不合规挂载新规今日生效,短视频引流直播间迈入三端全链路监管时代
  • Kimi K3登顶前端开发榜,月之暗面却遇“算力荒”,还计划最快6个月港股上市!
  • 工业一体机Linux系统部署实战:从系统安装到工业通信环境搭建