Redis入门到通关之Redis数据结构-Set篇

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Tair(兼容Redis),内存型 2GB
简介: Redis入门到通关之Redis数据结构-Set篇

☃️概述


SetRedis中的单列集合,满足下列特点:

  • 不保证有序性
  • 保证元素唯一
  • 求交集、并集、差集

可以看出,Set对查询元素的效率要求非常高,思考一下,什么样的数据结构可以满足?

HashTable,也就是Redis中的Dict,不过Dict是双列集合(可以存键、值对)

SetRedis中的集合,不一定确保元素有序,可以满足元素唯一、查询效率要求极高。


☃️数据结构


  • 为了查询效率和唯一性,set采用HT编码(Dict)。Dict中的key用来存储元素,value统一为null。
  • 当存储的所有数据都是整数,并且元素数量不超过set-max-intset-entries时,Set会采用 IntSet编码,以节省内存。

结构如下:


☃️源码



☃️其他


底下的就别看了

Redis 中,Set 类型的底层数据结构主要有两种:哈希表和有序集合。

哈希表:

Redis 中的 Set 类型通常使用哈希表来实现。哈希表是一种键值对存储结构,其中键是唯一的,而值则不需要唯一。哈希表的特点是可以快速地进行插入、删除和查找操作,平均时间复杂度为 O(1)。

有序集合:

有序集合是一种特殊的 Set 类型,它在每个元素的基础上关联了一个分值(score),这个分值用来对集合中的元素进行排序。在有序集合中,元素是唯一的,但分值可以重复。Redis 中的有序集合数据结构可以是跳跃表(skiplist)或者是压缩列表和哈希表的混合结构,具体选择哪种取决于元素数量和类型。

跳跃表:

跳跃表是一种有序数据结构,类似于链表,但是通过添加多级索引使得查找效率更高。在 Redis 中,跳跃表常被用来实现有序集合,因为它支持快速的元素插入、删除和范围查找操作,平均时间复杂度为 O(log n)。

压缩列表和哈希表:

对于元素数量较少的有序集合,Redis 也可以使用压缩列表和哈希表的混合结构来存储数据。这种结构在节省内存空间方面比跳跃表更有优势,但在插入和删除操作上可能没有跳跃表高效。

Redis 的 Set 类型主要使用哈希表来实现普通集合,而对于有序集合,则可以使用跳跃表或者压缩列表和哈希表的混合结构。这些不同的底层数据结构使得 Redis 能够高效地支持 Set 类型的各种操作需求。

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
14天前
|
存储 Java API
【数据结构】map&set详解
本文详细介绍了Java集合框架中的Set系列和Map系列集合。Set系列包括HashSet(哈希表实现,无序且元素唯一)、LinkedHashSet(保持插入顺序的HashSet)、TreeSet(红黑树实现,自动排序)。Map系列为双列集合,键值一一对应,键不可重复,值可重复。文章还介绍了HashMap、LinkedHashMap、TreeMap的具体实现与应用场景,并提供了面试题示例,如随机链表复制、宝石与石头、前K个高频单词等问题的解决方案。
22 6
【数据结构】map&set详解
|
3天前
|
存储 NoSQL Redis
6)深度解密 Redis 的集合(Set)
6)深度解密 Redis 的集合(Set)
12 1
|
6天前
|
存储 JSON NoSQL
redis基本数据结构(String,Hash,Set,List,SortedSet)【学习笔记】
这篇文章是关于Redis基本数据结构的学习笔记,包括了String、Hash、Set、List和SortedSet的介绍和常用命令。文章解释了每种数据结构的特点和使用场景,并通过命令示例演示了如何在Redis中操作这些数据结构。此外,还提供了一些练习示例,帮助读者更好地理解和应用这些数据结构。
redis基本数据结构(String,Hash,Set,List,SortedSet)【学习笔记】
|
2月前
|
存储 监控 NoSQL
redis数据结构-HyperLogLog
redis数据结构-HyperLogLog
32 1
|
2月前
|
存储 NoSQL 数据处理
redis数据结构-Bitmaps
redis数据结构-Bitmaps
29 0
|
2月前
|
存储 缓存 NoSQL
redis数据结构-hash
redis数据结构-hash
11 0
|
3天前
|
算法 安全 测试技术
golang 栈数据结构的实现和应用
本文详细介绍了“栈”这一数据结构的特点,并用Golang实现栈。栈是一种FILO(First In Last Out,即先进后出或后进先出)的数据结构。文章展示了如何用slice和链表来实现栈,并通过golang benchmark测试了二者的性能差异。此外,还提供了几个使用栈结构解决的实际算法问题示例,如有效的括号匹配等。
golang 栈数据结构的实现和应用
01_设计一个有getMin功能的栈
01_设计一个有getMin功能的栈
|
3天前
|
前端开发
07_用队列实现栈
07_用队列实现栈
06_用栈来求解汉诺塔问题
06_用栈来求解汉诺塔问题
下一篇
无影云桌面