讲师中心 微信公众号
AI工具推荐 视频效率加速

为什么Redis Set在元素较少时使用intset编码_探究整数集合内存优化

冬杰君_8966

冬杰君_8966

发布时间:2026-06-16 06:55:27

|

563人浏览过

|

来源于php中文网

原创

Redis Set在元素全为整数且数量≤512时自动采用intset编码,以节省3–5倍内存;其通过连续内存存储、变长编码和有序二分查找实现高效紧凑,且一旦降级为hashtable则不可逆。

为什么redis set在元素较少时使用intset编码_探究整数集合内存优化

Redis 的 Set 在元素全是整数且数量 ≤ 512(默认)时,自动用 intset 编码,不是为了“更酷”,而是实打实省 3–5 倍内存——关键在于它把整数塞进一块连续内存,不存指针、不建哈希桶、不带字符串头。

怎么确认你的 Set 正在走 intset 路线

别靠猜,直接查实时编码:

OBJECT ENCODING my_set 返回 "intset" 才算成功;返回 "hashtable" 就说明已降级,且不可逆。

  • 常见误操作:插入一次 "100abc" 或 "3.14",整个 set 永久切到 hashtable,哪怕后续全删光再重加合法整数也回不去
  • 从 RDB/AOF 恢复时,Redis 不会重新评估是否能切回 intset,只按落盘时的编码加载
  • DEBUG OBJECT my_set 可看更详细信息,但生产环境慎用(阻塞主线程)

intset 真正省内存的三个底层原因

它不是“压缩”,而是从数据结构设计上砍掉冗余:

Redis Skill - 高性能缓存管理
Redis Skill - 高性能缓存管理

Redis 缓存和数据结构管理技能。通过自然语言操作 Redis,支持 String、Hash、List、Set、ZSet、Stream 等数据结构操作。当用户提到 Redis、缓存、消息队列、会话存储时使用此技能。

下载
  • 无指针:hashtable 每个节点要存 key 指针 + next 指针 + 字符串头(至少 16–32 字节),intset 是纯 int8_t contents[] 数组,元素紧挨着
  • 变长编码:encoding 字段动态选 INTSET_ENC_INT16/INTSET_ENC_INT32/INTSET_ENC_INT64,比如全存 0–65535 就只用 2 字节/元素,不浪费
  • 有序存储:升序排列,支持二分查找(O(log n)),省掉哈希计算和链表遍历开销,小集合下比哈希表还快

什么情况下 intset 会失效并永久切换成 hashtable

两个条件必须同时满足才启用 intset,破一个就降级,且不回退:

  • 元素含非整数:哪怕只插一个 "1"(字符串)或 "-123x"(解析失败),intset 立即升级为 hashtable
  • 元素超阈值:set-max-intset-entries 默认 512,第 513 个整数插入时触发切换;之后删到只剩 10 个,也不会自动切回来
  • 注意:负数合法(如 -99),但超出 int64_t 范围(±9223372036854775807)也不行,strtol 解析会溢出失败

想压测或调试 intset 行为,绕不开的配置和命令

生产环境一般不动,但排查内存异常时得知道怎么调:

  • 改阈值:CONFIG SET set-max-intset-entries 1000(重启失效,仅运行时生效)
  • 验证是否生效:先 SADD test 1 2 3,再 OBJECT ENCODING test;然后 SADD test 1000000000000(确保没超 int64),观察是否仍为 intset
  • 注意:频繁插入跨位宽整数(比如先加 32767 再加 32768)会触发 intset 全量升级(如从 16 位→32 位),有短暂 CPU 小峰值,但只发生一次

最容易被忽略的是“不可逆性”:intset 降级到 hashtable 后,哪怕你重建一个全新 key 并严格只塞合法整数,只要数量 ≤512,它确实会再次用 intset——但旧 key 永远卡在 hashtable,不会因为删空而复活。内存优化这事,得从第一次写入就守规矩。

热门AI工具

更多
DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

讯飞绘文

讯飞绘文是一款由科大讯飞推出的一站式 AIGC 内容运营平台。

Laper
Laper Hot

Laper是专为编剧、导演和制片人推出的 AI 原生剧本创作工具。

音述AI
音述AI Hot

一款AI音频处理工具,主要用于音述AI是一个以“用声音述说故事”为核心的 AI 音乐创作与声音分享社区,适合需要提升相关任务效率的用户。

UpDream
UpDream Hot

一款AI视频创作工具,主要用于哔哩哔哩推出的自研AI视频创作工具,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

Atoms
Atoms Hot

Atoms是一款AI智能体工具,第一支自动构建真实业务的 AI 团队。

UP简历
UP简历 Hot

一款AI办公效率工具,主要用于基于AI技术的免费在线简历制作工具,适合需要提升相关任务效率的用户。

相关专题

更多
string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

5739

2023.08.02

int占多少字节
int占多少字节

int占4个字节,意味着一个int变量可以存储范围在-2,147,483,648到2,147,483,647之间的整数值,在某些情况下也可能是2个字节或8个字节,int是一种常用的数据类型,用于表示整数,需要根据具体情况选择合适的数据类型,以确保程序的正确性和性能。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2845

2024.08.29

c++怎么把double转成int
c++怎么把double转成int

本专题整合了 c++ double相关教程,阅读专题下面的文章了解更多详细内容。

3588

2025.08.29

C++中int的含义
C++中int的含义

本专题整合了C++中int相关内容,阅读专题下面的文章了解更多详细内容。

2545

2025.08.29

常用的数据库软件
常用的数据库软件

常用的数据库软件有MySQL、Oracle、SQL Server、PostgreSQL、MongoDB、Redis、Cassandra、Hadoop、Spark和Amazon DynamoDB。更多关于数据库软件的内容详情请看本专题下面的文章。php中文网欢迎大家前来学习。

4309

2023.11.02

内存数据库有哪些
内存数据库有哪些

内存数据库有Redis、Memcached、Apache Ignite、VoltDB、TimesTen、H2 Database、Aerospike、Oracle TimesTen In-Memory Database、SAP HANA和ache Cassandra。更多关于内存数据库相关问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

3815

2023.11.14

mongodb和redis哪个读取速度快
mongodb和redis哪个读取速度快

redis 的读取速度比 mongodb 更快。原因包括:1. redis 使用简单的键值存储,而 mongodb 存储 json 格式的数据,需要解析和反序列化。2. redis 使用哈希表快速查找数据,而 mongodb 使用 b-tree 索引。因此,redis 在需要高性能读取操作的应用程序中是一个更好的选择。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

6932

2024.04.02

redis怎么做缓存服务器
redis怎么做缓存服务器

redis 作为缓存服务器的答案:redis 是一款开源、高性能、分布式的键值存储,可作为缓存服务器使用。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

623

2024.04.07

LLVM自定义Pass怎么写
LLVM自定义Pass怎么写

本专题聚焦LLVM自定义Pass开发,整理Pass类结构、run()方法、PreservedAnalyses、CMake构建、插件注册、-load-pass-plugin加载和测试用例编写流程。

100

2026.09.30

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
phpEnv手册
phpEnv手册

共0课时 | 0人学习

进程与SOCKET
进程与SOCKET

共6课时 | 0.5万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn