Redis 的 Set 是 String 类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据。
Redis 中集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)。
集合中最大的成员数为 232 - 1 (4294967295, 每个集合可存储40多亿个成员)
集合的性质: 唯一性,无序性,确定性
注: 在string和link的命令中,可以通过range 来访问string中的某几个字符或某几个元素
但,因为集合的无序性,无法通过下标或范围来访问部分元素。因此想看元素,要么随机先一个,要么全选
使用场景 : 抽奖,点赞,标签,互相关注,好友推荐
sadd : 添加一个或者多个元素到集合中,成功返回新添加到集合的元素数量,已存在的会被忽略,不是集合类型返回错误
127.0.0.1:6379> sadd yhq name age sex name (integer) 3 127.0.0.1:6379> sadd yhq id (integer) 1
smembers : 返回集合所有元素 (sinter 单个集合)
127.0.0.1:6379> smembers yhq 1) "id" 2) "age" 3) "sex" 4) "name"
127.0.0.1:6379> sinter yhq
1) "id"
2) "age"
3) "sex"
4) "name"
scard : 返回集合元素数量,不存在返回0
127.0.0.1:6379> scard yhq (integer) 4
sdiff : 返回多个集合的差集,差集结果基于前面的集合
127.0.0.1:6379> smembers yhq 1) "id" 2) "age" 3) "sex" 4) "name" 127.0.0.1:6379> smembers qhh 1) "id" 2) "name" 127.0.0.1:6379> sdiff yhq qhh 1) "age" 2) "sex"
sdiffstore : 将差集(差集结果基于前面的集合)存到指定集合,如果存在覆盖,返回集合元素个数
127.0.0.1:6379> smembers yhq 1) "id" 2) "age" 3) "sex" 4) "name" 127.0.0.1:6379> smembers qhh 1) "id" 2) "name" 127.0.0.1:6379> sdiffstore diffs yhq qhh (integer) 2 127.0.0.1:6379> smembers diffs 1) "age" 2) "sex"
sinter : 返回指定集合的交集,不存在集合视为空集合,当有空集合时,结果也为空集(key不存在视为空,一个空全是空)
127.0.0.1:6379> smembers yhq 1) "id" 2) "age" 3) "sex" 4) "name" 127.0.0.1:6379> smembers qhh 1) "id" 2) "name" 127.0.0.1:6379> smembers yhqqhh 1) "age" 2) "id" 3) "name" 127.0.0.1:6379> sinter yhq qhh yhqqhh 1) "id" 2) "name" 127.0.0.1:6379> sinter yhq qhh yhqqhh a (empty list or set)
sinterstore : 将交集存到一个集合,存在覆盖,返回集合个数
127.0.0.1:6379> sinterstore inters yhq qhh yhqqhh (integer) 2 127.0.0.1:6379> smembers inters 1) "id" 2) "name"
sismember : 判断是否是集合元素,存在返回1,不存在或者不是返回0
127.0.0.1:6379> sismember yhq name (integer) 1 127.0.0.1:6379> sismember yhq name1 (integer) 0
spop : 随机移除一个或多个元素,返回移除的元素,集合不存在或者空集合返回nil(srandmember返回随机元素,不对集合修改)[count 3.2+版本可以指定移除数量,count大于集合数返回整个集合]
127.0.0.1:6379> smembers yhq 1) "id" 2) "sex" 3) "name" 127.0.0.1:6379> spop yhq "name" 127.0.0.1:6379> smembers yhq 1) "id" 2) "sex"
srandmember : 返回集合的随机元素(2.6+版本开始增加count) 如果count为正数,且小于集合基数,返回一个包含count的数组,数组中元素各不相同,如果count大于集合基数,返回整个集合,count为负数,返回一个数组,数组可能重复,长度为count绝对值 只提供key,返回一个元素,集合为空,返回nil,提供count返回一个数组,集合为空数组
127.0.0.1:6379> smembers yhq 1) "age" 2) "id" 3) "name" 4) "sex" 127.0.0.1:6379> srandmember yhq 2 1) "id" 2) "age" 127.0.0.1:6379> srandmember yhq 2 1) "id" 2) "name" 127.0.0.1:6379> srandmember yhq -3 1) "age" 2) "sex" 3) "age"
smove : 将m元素从一个a集合移到另一个b集合,如果a集合不存在m,命令不执行,返回0。否则m从a移到b,当b中以包含m时,命令仅是从a中移除m,ab不是集合类型,返回错误
127.0.0.1:6379> smembers qhh 1) "id" 2) "name" 127.0.0.1:6379> smove yhq qhh age (integer) 1 127.0.0.1:6379> smembers qhh 1) "age" 2) "id" 3) "name"
srem : 从集合移除一个或者多个元素,不存在元素忽略,不是集合类型返回错误,集合不存在返回0,>=2.4可以移除多个元素
127.0.0.1:6379> smembers qhh 1) "age" 2) "id" 3) "sex" 4) "name" 127.0.0.1:6379> srem qhh age id (integer) 2 127.0.0.1:6379> smembers qhh 1) "sex" 2) "name"
sunion : 返回集合并集
127.0.0.1:6379> smembers yhq 1) "age" 2) "id" 3) "name" 4) "sex" 127.0.0.1:6379> smembers qhh 1) "sex" 2) "name" 127.0.0.1:6379> smembers yhqqhh 1) "age" 2) "id" 3) "name" 127.0.0.1:6379> sunion yhq qhh yhqqhh 1) "age" 2) "id" 3) "name" 4) "sex"
sunionstore : 将集合并集存储到指定集合中,如果存在覆盖
127.0.0.1:6379> sunionstore sst yhq qhh yhqqhh (integer) 4 127.0.0.1:6379> smembers sst 1) "age" 2) "id" 3) "name" 4) "sex"
sscan :迭代集合元素(未完全理解)
127.0.0.1:6379> sscan yhq 0 match a* 1) "0" 2) 1) "age" 2) "add" 3) "apple"
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Redis之无序集合(set)类型命令 - Python技术站