目录
一.介绍SET类型
set类型和list都是集合,不过却有很大的区别,所谓的List是有序的,而set却是无序的。所谓的有序,就是插入顺序,而不是从小到大自动排序。
例子:List:[ 1, 2, 3] 和 [2, 1, 3] 代表不同的集合
SET:[1,2,3] 和 [2,1,3] 表示同一个集合
SET集合中元素不能重复
二.SET命令
集合的元素,代表 member
SADD命令
往集合当中添加元素,返回添加成功的元素个数。
语法: SADD key member [member,member,...]
SMEMBERS命令
展示集合当中元素
语法 :SMEMBERS key
SISMEMBER命令
判断一个元素在不在set当中
语法:SISMEMBER key member
SPOP命令
一般表示从末尾删除元素,但由于set集合是无序的,此处是随机删除COUNT 个元素。
语法:pop key [count]
SRANDMEMBER命令
随机获取集合当中的count个元素。
语法:srandmember key [count]
SMOVE 命令
将一个元素从源set(source)取出,并且放入目标的set集合(destination)
语法:SMOVE SOURCE DESTINATION MEMBER
SREM 命令
将集合set删除元素,一次删除多个个member
语法:srem key member [member ...]
集合之间的操作:交、并、差集
交集命令:SINTER key [key,key,...] 或者 SINTERSTORE DESTINATION key [key,key,...] 把结果放在DESTINATION当中。
并集命令:SUNION key [key ,...] 或者 SUNIONSTORE DESTINATION key [key,key,...] 把结果放在DESTINATION当中。
差集命令:SDIFF key [key ,...] 或者 SDIFFSTORE DESTINATION key [key,key,...] 把结果放在DESTINATION当中。
三.内部编码
对于 SET 类型(无序集合),Redis 使用了多种不同的内部编码方式,具体取决于存储的数据量和元素类型。以下是 Redis 中 SET 类型可能的内部编码方式:
intset:
- 当一个 SET 只包含整数值,并且元素个数不超过配置的限制(默认512个元素),Redis 就会使用 intset(整数集合)作为内部编码方式。intset 是一种紧凑的数据结构,用于存储整数值,通过压缩存储节省内存。
hashtable:
- 当一个 SET 包含的元素个数超过 intset 所能存储的限制,或者 SET 包含的元素不是整数值时,Redis 就会使用 hashtable(哈希表)作为内部编码方式。哈希表允许存储各种类型的元素,并且支持动态扩容,适合存储大量元素和非整数类型的数据。
四.应用场景
1.个人标签
使用SET保存用户的标签,例如分析你的个人特征,再根据你的标签,推荐你需要的东西!
2.得出共同好友
使用集合求交集的方式。