Redis 数据类型 Set

2023-07-29,,

Redis 数据类型 Set(集合)

Redis 常用命令,思维导图 >>>

Redis 的 Set 是 String 类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据。

Redis 中集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)

Set 数据类型的特点:

    数据不重复
    元素没有下标

redis的set类型是使用哈希表构造的,因此复杂度是O(1),它支持集合内的增删改查,并且支持多个集合间的交集、并集、差集操作。可以利用这些集合操作,解决程序开发过程当中很多数据集合间的问题。

Set数据类型的内部编码有两种:

Intset(整数集合):当集合元素个数小于set-max-ziplist-entries配置(默认512个),redis会使用intset作为集合的内部实现来减少内存的使用

Hashtable(哈希表):当集合类型无法满足intset的条件时,redis会使用hashtable作为集合的内部实现

  ≤512 >512
整数 inset hashTable
字符串 hashTable hashTable

交集,并集,差集

底层实现

(1)intset编码

intset编码的集合对象底层实现是整数集合,所有元素都保存在整数集合中。

(2)hashtable编码

hashtable编码的集合对象底层实现是字典,字典的每个键都是一个字符串对象,保存一个集合元素,不同的是字典的值都是NULL;可以参考java中的hashset结构。

应用场景

用于存储好友/关注/粉丝/感兴趣的人集合,集合中的元素数量可能很多

常用命令

1.sadd(name,values)

# name对应的集合中添加元素
2.scard(name) # 获取name对应的集合中元素个数
3.sdiff(keys, *args) # 在第一个name对应的集合中且不在其他name对应的集合的元素集合
4.sdiffstore(dest, keys, *args) # 获取第一个name对应的集合中且不在其他name对应的集合,再将其新加入到dest对应的集合中
5.sinter(keys, *args) # 获取多一个name对应集合的并集
6.sinterstore(dest, keys, *args) # 获取多一个name对应集合的并集,再讲其加入到dest对应的集合中
7.sismember(name, value) # 检查value是否是name对应的集合的成员
8.smembers(name) # 获取name对应的集合的所有成员
9.smove(src, dst, value) # 将某个成员从一个集合中移动到另外一个集合
10.spop(name) # 从集合的右侧(尾部)移除一个成员,并将其返回
11.srandmember(name, numbers) # 从name对应的集合中随机获取 numbers 个元素
12.srem(name, values) # 在name对应的集合中删除某些值
13.sunion(keys, *args) # 获取多一个name对应的集合的并集
14.sunionstore(dest,keys, *args) # 获取多一个name对应的集合的并集,并将结果保存到dest对应的集合中
sscan(name, cursor=0, match=None, count=None)
sscan_iter(name, match=None, count=None) # 同字符串的操作,用于增量迭代分批获取元素,避免内存消耗太大

Redis 数据类型 Set的相关教程结束。

《Redis 数据类型 Set.doc》

下载本文的Word格式文档,以方便收藏与打印。