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

Redis 五大核心数据结构知识点梳理

目录

一、String(字符串):最基础的键值存储

1. 核心定义

2. 底层实现

3. 关键特性

4. 核心命令

5. 典型应用

二、Hash(哈希):键值对的集合

1. 核心定义

2. 底层实现

3. 关键特性

4. 核心命令

5. 典型应用

三、List(列表):有序的字符串序列

1. 核心定义

2. 底层实现

3. 关键特性

4. 核心命令

5. 典型应用

四、Set(集合):无序的唯一字符串集合

1. 核心定义

2. 底层实现

3. 关键特性

4. 核心命令

5. 典型应用

五、Sorted Set(有序集合):按分数排序的唯一集合

1. 核心定义

2. 底层实现

3. 关键特性

4. 核心命令

5. 典型应用

总结:五大数据结构核心差异表


Redis 五种核心数据结构(String、Hash、List、Set、Sorted Set)是其高性能特性的核心载体,覆盖从简单缓存到复杂业务场景的需求。以下从核心定义、底层实现、关键特性、核心命令、典型应用五个维度,进行结构化知识点梳理,便于快速理解与记忆。

一、String(字符串):最基础的键值存储

1. 核心定义

  • Redis 最基础的数据结构,对外表现为“键-值”对,值支持字符串、整数(64位有符号)、浮点数、二进制数据(如图片流)。
  • 是构建复杂功能的“原子单元”,其他数据结构的元素本质也多为 String 类型。

2. 底层实现

依赖 SDS(Simple Dynamic String,动态字符串) 结构,解决 C 语言原生字符串缺陷,编码随值的类型/长度动态切换:

编码类型

适用场景

核心优势

int

值为 64 位有符号整数

直接存整数,支持 INCR/DECR 原子操作,内存占用最小

embstr

字符串长度 ≤ 44 字节(Redis 6.0+)

键对象与 SDS 数据同块内存,减少碎片

raw

字符串长度 > 44 字节

键与 SDS 分开存储,支持动态扩容,适合长字符串

3. 关键特性

  • 操作性能:所有操作(增删改查)均为 O(1) 时间复杂度。
  • 功能扩展:支持整数原子增减、字符串拼接/截取、二进制安全存储。

4. 核心命令

命令

功能

示例

SET key value [EX 秒] [NX]

设置键值(可选过期/不存在才设)

SET user:name Alice EX 3600

GET key

获取值

GET user:name

INCR/DECR key

整数原子加/减 1

INCR user:age

APPEND key value

字符串拼接

APPEND user:info " gender:女"

5. 典型应用

  • 缓存热点数据(如商品详情、用户信息);
  • 计数器(文章阅读量、接口调用次数);
  • 分布式锁(基于 SET NX EX 实现);
  • Session 存储(分布式系统跨服务共享)。

二、Hash(哈希):键值对的集合

1. 核心定义

  • 二级结构:“键-(字段 field - 值 value)”,一个 Hash 键可包含多个 field-value 对,适合存储多属性的复杂对象

2. 底层实现

随“字段数量”和“字段值大小”动态切换编码,平衡内存与性能:

编码类型

适用场景

核心优势

ziplist(压缩列表)

字段数 ≤ 512(默认)+ 字段值 ≤ 64 字节(默认)

连续内存存储,无指针开销,内存利用率极高

hashtable(哈希表)

字段数 > 512 或字段值 > 64 字节

数组+链表解决哈希冲突,支持 O(1) 快速查询

3. 关键特性

  • 操作粒度:可单独操作某个 field(增删改查),无需修改整个 Hash;
  • 性能:单个 field 操作 O(1),遍历所有 field 操作 O(n)(n 为字段数)。

4. 核心命令

命令

功能

示例

HSET key field value

设置 field-value 对

HSET user:100 name Alice age 25

HGET key field

获取指定 field 的值

HGET user:100 name

HMGET key f1 f2

批量获取 field 值

HMGET user:100 name age

HKEYS/HVALS key

获取所有 field/所有 value

HKEYS user:100

HDEL key field

删除指定 field

HDEL user:100 age

5. 典型应用

  • 存储对象属性(如用户信息、商品规格);
  • 购物车(用户 ID 为 Hash 键,商品 ID 为 field,数量为 value);
  • 配置管理(存储系统/服务的多维度配置项)。

三、List(列表):有序的字符串序列

1. 核心定义

  • 有序、可重复的字符串集合,支持从头部(left)、尾部(right) 高效插入/删除,底层基于双向链表思想实现。

2. 底层实现

Redis 3.2+ 统一使用 quicklist(快速列表),替代早期的 ziplist + linkedlist

  • 结构:多个 ziplist(压缩列表)用双向链表连接,每个 ziplist 存多个元素;
  • 优势:兼顾 ziplist 的内存紧凑性和双向链表的两端操作高效性;
  • 关键配置:list-max-ziplist-size(单个 ziplist 最大大小)、list-compress-depth(两端节点压缩深度)。

3. 关键特性

  • 有序性:按元素插入顺序排列,支持索引访问(但中间索引操作 O(n));
  • 性能:头部/尾部插入/删除 O(1),中间元素操作 O(n)。

4. 核心命令

命令

功能

示例

LPUSH/RPUSH key val

头部/尾部插入元素

LPUSH msg:queue "hello"

LPOP/RPOP key

头部/尾部删除元素

RPOP msg:queue

LRANGE key start end

获取 [start, end] 区间元素

LRANGE msg:queue 0 -1(所有元素)

LLEN key

获取列表长度

LLEN msg:queue

5. 典型应用

  • 消息队列(基于 LPUSH + RPOP 实现简单 FIFO 队列);
  • 最新列表(如“最新文章”“最近评论”,LPUSH 新增 + LRANGE 取前 N);
  • 栈(基于 LPUSH + LPOP 实现 LIFO 栈)。

四、Set(集合):无序的唯一字符串集合

1. 核心定义

  • 无序、元素唯一的字符串集合,支持交集、并集、差集等集合运算,适合“去重”和“关系计算”。

2. 底层实现

随元素类型和数量动态切换编码:

编码类型

适用场景

核心优势

intset(整数集合)

所有元素为整数 + 元素数 ≤ 512(默认)

紧凑存储,支持整数自动升级(16位→32位→64位),无哈希开销

hashtable(哈希表)

元素含非整数或元素数 > 512

以元素为键、值为 NULL,利用哈希表唯一性去重,O(1) 操作

3. 关键特性

  • 唯一性:自动去重,重复插入元素会被忽略;
  • 集合运算:支持交集(SINTER)、并集(SUNION)、差集(SDIFF);
  • 性能:插入/删除/判断元素存在 O(1),集合运算 O(n)(n 为元素总数)。

4. 核心命令

命令

功能

示例

SADD key member

添加元素

SADD user:100:tags sports music

SMEMBERS key

获取所有元素

SMEMBERS user:100:tags

SISMEMBER key member

判断元素是否存在

SISMEMBER user:100:tags sports

SINTER/SUNION/SDIFF k1 k2

交集/并集/差集

SINTER user1:tags user2:tags

SREM key member

删除元素

SREM user:100:tags music

5. 典型应用

  • 数据去重(如用户点赞的文章 ID、去重的日志 ID);
  • 关系计算(社交场景的“共同好友”“好友推荐”);
  • 标签系统(商品标签、用户兴趣标签,支持多标签筛选)。

五、Sorted Set(有序集合):按分数排序的唯一集合

1. 核心定义

  • 在 Set“元素唯一”的基础上,为每个元素分配分数(score),按分数自动排序,支持按分数范围/排名查询,是 Redis 功能最强大的结构之一。

2. 底层实现

随元素数量和元素大小动态切换编码:

编码类型

适用场景

核心优势

ziplist(压缩列表)

元素数 ≤ 128(默认)+ 元素长度 ≤ 64 字节(默认)

按“member→score”交替存储,分数升序,内存紧凑

skiplist + hashtable

元素数 > 128 或元素长度 > 64 字节

- 跳表(skiplist):按 score 排序,O(log n) 范围/排名查询;
- 哈希表:映射 member→score,O(1) 查改 score,保证唯一性

3. 关键特性

  • 有序性:按 score 升序排列,支持降序查询(ZREVRANGE);
  • 排名功能:可获取元素的排名(ZRANK/ZREVRANK),或按排名取元素;
  • 性能:插入/删除/查改 score 均为 O(log n)。

4. 核心命令

命令

功能

示例

ZADD key score member

添加元素(指定分数)

ZADD rank:score 95 Alice 88 Bob

ZRANGE/ZREVRANGE k s e [WITHSCORES]

升序/降序取元素(带分数)

ZREVRANGE rank:score 0 0(第一名)

ZSCORE key member

获取元素分数

ZSCORE rank:score Alice

ZRANK/ZREVRANK key member

升序/降序排名

ZREVRANK rank:score Alice

ZRANGEBYSCORE k min max

按分数范围取元素

ZRANGEBYSCORE rank:score 80 90

5. 典型应用

  • 排行榜系统(游戏积分、文章阅读量、商品销量 Top N);
  • 优先级队列(任务优先级为 score,高分数任务优先执行);
  • 范围统计(用户积分等级划分、按时间范围筛选数据)。

总结:五大数据结构核心差异表

数据结构

核心特点

有序性

唯一性

核心优势场景

操作复杂度(核心操作)

String

单键值、多类型

-

-

缓存、计数、锁

O(1)

Hash

二级键值对

-

-

存储对象、购物车

O(1)(单 field)

List

双向序列

插入序

不保证

消息队列、最新列表

O(1)(头尾)、O(n)(中间)

Set

无序列合

保证

去重、关系计算

O(1)(增删查)、O(n)(集合运算)

Sorted Set

分数排序

分数序

保证

排行榜、优先级队列

O(log n)(增删查排)

http://www.dtcms.com/a/410336.html

相关文章:

  • 微信小程序学习(一)
  • 零售企业档案检索慢?档案管理系统解决档案管理痛点
  • Docker 全阶段学习指南
  • Arbess从入门到实战(3) - 使用Arbess+GitLab实现Vue.js项目自动化部署
  • 智慧停车大屏数据分析与设计文档
  • 网站建设商家注册免费
  • 做网站后台系统的规范个人小程序商城
  • Linux 进程程序替换
  • 铜钟音乐前端技术解析
  • Flutter 运行IOS真机,提示无法打开“****”
  • Windows配置C/C++环境:MinGW+Vscode
  • Docker安装(Centos/Ubuntu/UOS)
  • 自动化运维利器:MCP Server + 阿里云
  • 常州公司建站模板网站怎么做定位功能
  • 网站弹窗代码网络游戏开发成本
  • Linux的网络基础
  • 福田网站建设课程考试wordpress页面链接404
  • I2C EEPROM存储影响到Rx response
  • qt使用opencv的imread读取图像为空
  • 单片机中用printf输出函数的地址
  • 做视频用的网站铁岭 开原网站建设
  • 4. ChatClient 的初始,快速使用上手
  • 【编号525】1969-2008北京五环路历年道路路网数据
  • 淘宝团购上线:本地生活的“两种解法”
  • 直播一级a做爰片免费网站学校做网站方案
  • Syslog和Windows事件日志分析工具
  • request库的详解
  • 如何做一家类似携程的网站南昌专业的网站建设公司
  • C# WPF实现ComboBox实时搜索与数据绑定
  • eBay自养号系统构建指南:打造安全稳定的测评采购环境