首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >解析redis的set数据结构有时返回结果是有序的

解析redis的set数据结构有时返回结果是有序的

原创
作者头像
跃折纸摘星
发布2025-04-08 09:51:42
发布2025-04-08 09:51:42
3580
举报
文章被收录于专栏:redisredis

首先说结论:Redis 的 Set 编码机制​​:

  • 当 Set 中所有元素都是​​整数​​,且元素数量较少(默认 <= 512,可配置)时,Redis 会使用 ​​intset​​ 编码(紧凑的整数数组存储)。
  • ​intset 编码的 Set 会自动将元素按升序排列​​以节省内存和提升查询效率,但对外仍表现为“无序集合”(实际顺序由编码决定,而非插入顺序)。
  • 当元素包含非整数或数量超过阈值时,Redis 会切换为 ​​hashtable 编码​​,此时元素顺序由哈希函数决定,不再有序。

事件前因后果: 在我用redis的set数据结构添加1,3,2后在查询很多次之后的结果都是1,2,3。如图所示:

图1
图1

但是我用

图2
图2

查询后的结果确是无序的。

按照我们开始学习都告诉我们set是无序的,拿为什么图1会出现这样的结果呢,在多次查询资料后得到了上面的解释:当元素包含非整数或数量超过阈值时,Redis 会切换为 ​​hashtable 编码​​,此时元素顺序由哈希函数决定,不再有序。

最后,如果你看到最后了,能给我的文章一个小小的“一键三连",是对我这个小作者最大的肯定。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档