Redis 数据类型 Set

Redis 数据类型 Set(集合)

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

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

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

Set 数据类型的特点:

  1. 数据不重复
  2. 元素没有下标

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

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

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

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

 ≤512>512
整数insethashTable
字符串hashTablehashTable

交集,并集,差集

底层实现

(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)

# 同字符串的操作,用于增量迭代分批获取元素,避免内存消耗太大
 

 

 

 

posted @ 2021-01-11 10:48  汀风说后端  阅读(689)  评论(0编辑  收藏  举报