Redis 常见数据结构,编码方式

大家好,这篇文章带来的是有关redis的数据类型和底层实际编码的有关介绍,希望能有所收获!

Redis常见数据结构,编码方式

Redis 提供了5种数据结构,理解每种数据结构的特点对于Redis开发运维非常重要,同时掌握每种数据结构的常见命令,会在使用Redis的时候做到游刃有余。

数据结构:redis承诺给我们的,也可以理解成数据类型

编码方式:redis内部底层的实现

同一个数据类型,背后可能的编码实现方式是不同的,会根据特定场景优化

**1. raw:**最基本的字符串类型,底层本质是持有一个 char 数组。

**2. int:**Redis 常被用于实现计数类功能,当 value 为整数时,Redis 会直接以 int 类型存储(无需转成字符串),提升效率且节省空间。

**3. embstr:**针对短字符串设计的特殊优化结构,内存布局更紧凑,避免内存碎片,提升访问效率。

**4. hashtable:**Redis 内部最基础的哈希表实现,是哈希类型的默认存储结构(虽与通用哈希表实现细节略有差异,但核心思想一致)。

**5. ziplist(压缩列表):**当哈希、列表等结构的元素数量少、元素体积小时,Redis 会用 ziplist 替代原有结构(如 hashtable、linkedlist),大幅节省内存空间。

**6. linkedlist:**普通双向链表,是 Redis 早期列表类型的底层实现,便于插入、删除操作,但内存开销较大。

**7. quicklist:**从 Redis 3.2 版本开始引入,整合了 linkedlist 和 ziplist 的优点。其本质是一个链表,链表的每个节点都是一个 ziplist,既兼顾了 linkedlist 的高效插入删除能力,又具备 ziplist 的内存节省优势,思想类似 C++ 中的 std::deque。

**8. intset(整数集合):**专门用于存储全部由整数构成的集合,底层为有序数组,查询效率高,且比普通集合更节省内存。

**9. skiplist(跳表):**本质是一种有序链表,与普通链表不同,跳表的每个节点拥有多个指针域,通过分层指针的巧妙搭配,实现近似二分查找,查询时间复杂度可达 O(logN),是 Redis 有序集合(zset)的核心底层实现之一。

object encoding key

object encoding key:查看key对应的value的实际编码方式

redis会自动根据当前的实际情况选择内部的编码方式,自动使用的

是否要记住,啥时候使用啥编码方式呢?

只记思想,不记数字。

相关推荐
梦想平凡1 小时前
百游棋牌源代码开发搭建教程(十):隔离部署、备份恢复与双端验收
java·前端·javascript·数据库·源代码管理
xcLeigh1 小时前
让大模型长出手脚,自己写SQL查数据库(Function Calling初探)
数据库·人工智能·sql·时序数据库·timechoai
yume_sibai2 小时前
06-Rust Web 开发实战(Axum 框架 + 数据库 + JWT 认证 + 中间件 + 部署)
前端·数据库·rust
AugustRed3 小时前
Neo4j 图数据库原理 + 应用场景简单介绍
数据库·neo4j
Gl�ria3 小时前
Redis 高可用架构对比
数据库·redis
IpdataCloud4 小时前
高可用的IP数据接口平台有哪些?从可用性、P99延迟到离线部署的评估框架(含代码)
数据库·tcp/ip·ip
呆萌很4 小时前
MySQL 数据库和表的管理操作(命令行)
数据库·mysql
IvorySQL5 小时前
当PostgreSQL“听懂”MySQL——协议兼容层的设计与实战
数据库·人工智能·postgresql
这个DBA有点耶6 小时前
银行核心系统数据库迁移怎么选?6 步法+5 个避坑指南
数据库·安全·架构
Zenova EdgeOS6 小时前
Python 工业边缘 redis-py 异步实战
开发语言·redis·python