跳到主要内容

集合

2024年04月08日
柏拉文
越努力,越幸运

一、认识


RedisSet 数据结构是一种无序集合,包含多个不重复的元素,支持高效的集合操作,如交集、并集、差集等。Set 具有非常高效的插入、删除和查找操作,通常用于需要去重或者进行集合运算的场景。

Redis 结构特点: 无序, Set 中的元素没有顺序。你不能按照插入的顺序访问元素,但可以通过操作获取 Set 中的所有元素,或者执行集合运算(如交集、并集、差集); 不重复, Set 中的元素是唯一的。插入相同的元素不会改变 Set 的内容。这是 Set 最重要的特性,通常用于去重。

Redis 优化策略: Redis 中的 Set 数据结构通常使用 哈希表(Hash Table整数集合(IntSet 来实现,具体实现依赖于 Set 的大小和元素类型。对于包含小整数(例如小于某个阈值的整数)的 SetRedis 会使用 IntSet 编码,这是一种更高效的内存表示方式。IntSet 是针对整数类型元素的优化。当 Set 中的元素全部为整数时,Redis 会自动使用 IntSet 编码来节省内存。IntSet 使用压缩方式存储整数集合,通常比哈希表更加节省内存。如果 Set 中只包含整数,IntSet 编码能够大大减少内存的占用。IntSet 编码只适用于整数类型的元素,当包含非整数类型时,Redis 会自动切换回哈希表实现。对于大多数的 SetRedis 使用哈希表来实现。哈希表是一种 key-value 存储结构,其中每个元素的哈希值会被用作存储位置的依据。哈希表提供了 O(1) 时间复杂度的插入、删除和查找操作,使得 Redis Set 在这些操作上表现非常高效。当 Set 中的元素数量较大时,Redis 会通过哈希表来存储元素,从而支持快速访问和操作。内存优化, Redis 通过智能选择哈希表和 IntSet 编码,在需要时自动切换,实现了内存的节省和高效的访问。例如,IntSet 编码显著减少了存储小整数集合时的内存占用。渐进式更新, Redis 使用渐进式的哈希表扩展策略,哈希表的大小会根据元素的插入自动调整,保证了在处理大量元素时的高效性。