马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
x
Redis中关于set的操纵
前言
Redis是⼀种基于键值对(key-value)的NoSQL数据库,与很多键值对数据库差别的是,Redis中的值可以是由string(字符串)、hash(哈希)、list(列表)、set(聚集)、zset(有序聚集)、Bitmaps(位图)、HyperLogLog、GEO(地理信息定位)等多种数据结构和算法构成,因此Redis可以满⾜很多的应⽤场景,⽽且由于Redis会将所有数据都存放再内存中,所以它的读写性能⾮常惊⼈。不但如此,Redis还可以将内存的数据利⽤快照和⽇志的情势生存到硬盘上,这样在发⽣雷同断电大概机器故障的时候,内存中的数据不会“丢失”。除了上述功能以外,Redis还提供了键过期、发布订阅、事务、流⽔线、Lua脚本等附加功能。总之,假如在合适的场景使⽤号Redis,它就会像⼀把瑞⼠军⼑⼀样所向披靡。
本文先容了Redis中有关set聚集的操纵下令,来帮助各人理解Redis中set聚集。
一、set聚集是什么?
聚集类型也是生存多个字符串类型的元素的,但和列表类型差别的是,聚会合元素之间是⽆序
的并且元素不答应重复,Redis除了⽀持聚集内的增删查改操纵,同时还⽀持多个聚集取交集、并集、差集,合理地使⽤好聚集类型,能在实际开辟中办理很多题目。
二、set根本下令操纵
1.sadd操纵
sadd:将⼀个大概多个元素添加到set中。注意,重复的元素⽆法添加到set中。
下令有效版本:1.0.0之后
时间复杂度:O(1)
返回值:本次添加成功的元素个数。
语法:sadd key member [member …]
- redis> sadd myset "Hello"
- (integer) 1
- redis> sadd myset "World"
- (integer) 1
- redis>s add myset "World" //去重操作
- (integer) 0
- redis> smembers myset //查看myset中的元素,返回的是元素的值
- 1) "Hello"
- 2) "World"
复制代码 2.smembers操纵
获取⼀个set中的所有元素,注意,元素间的次序是⽆序的。
下令有效版本:1.0.0之后
时间复杂度:O(N)
返回值:所有元素的列表。
语法:smembers key
代码如下(示例):
- redis> sadd myset "Hello" //添加元素
- (integer) 1
- redis> sadd myset "World"
- (integer) 1
- redis> smembers myset //获取元素
- 1) "Hello"
- 2) "World"
复制代码 3.sismember操纵
判定⼀个元素在不在set中。
下令有效版本:1.0.0之后
时间复杂度:O(1)
返回值:1表⽰元素在set中。0表⽰元素不在set中大概key不存在。
语法: sismember key member
代码如下(示例):
- redis> sadd myset "one"
- (integer) 1
- redis> sismember myset "one"
- (integer) 1
- redis> sismember myset "two"
- (integer) 0
复制代码 4.scard操纵
获取⼀个set的基数(cardinality),即set中的元素个数。
下令有效版本:1.0.0之后
时间复杂度:O(1)
返回值:set内的元素个数。
语法: scard key
代码如下(示例):
- redis> sadd myset "Hello"
- (integer) 1
- redis> sadd myset "World"
- (integer) 1
- redis> scard myset
- (integer) 2
复制代码 5.spop操纵
从set中删除并返回⼀个大概多个元素。注意,由于set内的元素是⽆序的,所以取出哪个元素实际是未定义⾏为,即可以看作随机的。
下令有效版本:1.0.0之后
时间复杂度:O(1)
返回值:1表⽰元素在set中。0表⽰元素不在set中大概key不存在。
语法: spop key [count]
代码如下(示例):
- redis> sadd myset "one"
- (integer) 1
- redis> sadd myset "two"
- (integer) 1
- redis> sadd myset "three"
- (integer) 1
- redis> spop myset
- "one"
- redis> smembers myset
- 1) "three"
- 2) "two"
- redis> sadd myset "four"
- (integer) 1
- redis> sadd myset "five"
- (integer) 1
- redis> spop myset 3
- 1) "three"
- 2) "four"
- 3) "two"
- redis> smembers myset
- 1) "five"
复制代码 6.smove操纵
将⼀个元素从源set取出并放⼊⽬标set中。
下令有效版本:1.0.0之后
时间复杂度:O(1)
返回值:1表⽰移动成功,0表⽰失败。
语法: smove source destination member
代码如下(示例):
- redis> sadd myset "one"
- (integer) 1
- redis> sadd myset "two"
- (integer) 1
- redis> sadd myotherset "three"
- (integer) 1
- redis> smove myset myotherset "two"
- (integer) 1
- redis> smembers myset
- 1) "one"
- redis> smembers myotherset
- 1) "three"
- 2) "two"
复制代码 7.srem操纵
将指定的元素从set中删除。
下令有效版本:1.0.0之后
时间复杂度:O(N),N是要删除的元素个数.
返回值:本次操纵删除的元素个数。
语法: srem key member [member …]
代码如下(示例):
- redis> sadd myset "one"
- (integer) 1
- redis> sadd myset "two"
- (integer) 1
- redis> sadd myset "three"
- (integer) 1
- redis> srem myset "one"
- (integer) 1
- redis> srem myset "four"
- (integer) 0
- redis> smembers myset
- 1) "three"
- 2) "two"
复制代码 8.sinter操纵
获取给定set的交会合的元素。
下令有效版本:1.0.0之后
时间复杂度:O(N*M),N是最⼩的聚集元素个数.M是最⼤的聚集元素个数.
返回值:交集的元素。
语法: sinter key [key …]
代码如下(示例):
- redis> sadd key1 "a"
- (integer) 1
- redis> sadd key1 "b"
- (integer) 1
- redis> sadd key1 "c"
- (integer) 1
- redis> sadd key2 "c"
- (integer) 1
- redis> sadd key2 "d"
- (integer) 1
- redis> sadd key2 "e"
- (integer) 1
- redis> sinter key1 key2
- 1) "c"
复制代码 9.sinterstore操纵
获取给定set的交会合的元素并生存到⽬标set中。(其他聚集操纵也有相关store等操纵,后面不加以赘述)。
下令有效版本:1.0.0之后
时间复杂度:O(N*M),N是最⼩的聚集元素个数.M是最⼤的聚集元素个数.
返回值:交集的元素个数。
语法: sinterstore destination key [key …]
代码如下(示例):
- redis> sadd key1 "a"
- (integer) 1
- redis> sadd key1 "b"
- (integer) 1
- redis> sadd key1 "c"
- (integer) 1
- redis> sadd key2 "c"
- (integer) 1
- redis> sadd key2 "d"
- (integer) 1
- redis> sadd key2 "e"
- (integer) 1
- redis> sinterstore key key1 key2
- (integer) 1
- redis> smembers key
- 1) "c"
复制代码 10.sunion操纵
获取给定set的并会合的元素。
下令有效版本:1.0.0之后
时间复杂度:O(N),N给定的所有聚集的总的元素个数.
返回值:并集的元素。
语法: sunion key [key …]
代码如下(示例):
- redis> sadd key1 "a"
- (integer) 1
- redis> sadd key1 "b"
- (integer) 1
- redis> sadd key1 "c"
- (integer) 1
- redis> sadd key2 "c"
- (integer) 1
- redis> sadd key2 "d"
- (integer) 1
- redis> sadd key2 "e"
- (integer) 1
- redis> sunion key1 key2
- 1) "a"
- 2) "c"
- 3) "e"
- 4) "b"
- 5) "d"
- 1) "c"
复制代码 11.sdiff操纵
获取给定set的差会合的元素。(不满足交换律)
下令有效版本:1.0.0之后
时间复杂度:O(N),N给定的所有聚集的总的元素个数.
返回值:差集的元素。
语法: sdiff key [key …]
代码如下(示例):
- redis> sadd key1 "a"
- (integer) 1
- redis> sadd key1 "b"
- (integer) 1
- redis> sadd key1 "c"
- (integer) 1
- redis> sadd key2 "c"
- (integer) 1
- redis> sadd key2 "d"
- (integer) 1
- redis> sadd key2 "e"
- (integer) 1
- redis> sdiff key1 key2
- 1) "a"
- 2) "b"
复制代码 三、下令小结操纵
下令时间复杂度sadd key element [element…]O(k),k是元素个数srem key element [element…]O(k),k是元素个数scard keyO(1)sismember key elementO(1)srandmember key[count]O(n),n是countspop key [count]O(n),n是countsmembers keyO(k),k是元素个数sinter key [key…] sitnerstoreO(m*k),k是⼏个聚会合元素最⼩的个数,m是键个数sunion key [key…] sunionstoreO(k),k是多个聚集的元素个数总和sdiff key [key…] sdiffstoreO(k),k是多个聚集的元素个数总和 总结
本文先容了redis中set的有关操纵,并且给出了相应的操纵代码示例,分析了相关操纵的时间复杂度。希望以上内容能帮助各人相识到set的相关知识。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |