跟我学Redis(7)—set类型及操作

来源:互联网 发布:知乎 品牌和市场区别 编辑:程序博客网 时间:2024/06/05 04:06

set是集合,和我们数学中的集合概念相似,对集合的操作有添加删除元素,有对多个集合求交并差等操作,操作中key理解为集合的名字。

Redis的set是string类型的无序集合。set元素最大可以包含(2的32次方)个元素。 set的是通过hash table实现的,所以添加、删除和查找的复杂度都是O(1)。hash table 会随着添加或者删除自动的调整大小。

set 集合类型除了基本的添加删除操作,其他有用的操作还包含集合的取并集(union),交集(intersection),差集(difference)。

smembers

查看key对应的set的所有元素

语法:smembers key

sadd

向key对应的set中添加元素

语法:sadd key element

redis 127.0.0.1:6379> sadd myset2 "one" 
(integer) 1
redis 127.0.0.1:6379> sadd myset2 "two"
(integer) 1
redis 127.0.0.1:6379> sadd myset2 "three"
(integer) 1
redis 127.0.0.1:6379> srem myset2 "one"
(integer) 1
redis 127.0.0.1:6379> srem myset2 "four"
(integer) 0
redis 127.0.0.1:6379> smembers myset2 1) "three"
2) "two"
redis 127.0.0.1:6379>

srem

删除key对应的set中的元素 

语法:srem key element

redis 127.0.0.1:6379> srem myset2 "one" 
(integer) 1
redis 127.0.0.1:6379> srem myset2 "four"
(integer) 0
redis 127.0.0.1:6379> smembers myset2 1) "three"
2) "two"
redis 127.0.0.1:6379>

spop

随机删除并返回key对应的set中一个元素

语法:spop key

redis 127.0.0.1:6379> spop myset3 "three" 
redis 127.0.0.1:6379> smembers myset3 1) "two"
2) "one"
redis 127.0.0.1:6379>

sdiff

set1和set2的差集(set1-set2)

语法:sdiff set1 set2

redis 127.0.0.1:6379>  smembers myset2 1) "three" 
2
) "two"
redis 127.0.0.1:6379> smembers myset3 1) "two"
2) "one"
redis 127.0.0.1:6379> sdiff myset2 myset3 1) "three"
redis 127.0.0.1:6379>

sdiffstore

差集并保存set3

语法:sdiffstore set3 set1 set2

redis 127.0.0.1:6379> smembers myset2 1) "three" 
2) "two"
redis 127.0.0.1:6379> smembers myset3 1) "two"
2) "one"
redis 127.0.0.1:6379> sdiffstore myset4 myset2 myset3 (integer) 1
redis 127.0.0.1:6379> smembers myset4 1) "three"
redis 127.0.0.1:6379>

sinter

返回set1和set2的交集

语法:sinter set1 set2

redis 127.0.0.1:6379> smembers myset2 1) "three" 
2
) "two"
redis 127.0.0.1:6379> smembers myset3 1) "two"
2
) "one"
redis 127.0.0.1:6379> sinter myset2 myset3 1) "two"
redis 127.0.0.1:6379>

sinterstore

交集并保存到set3

语法:sinterstore set3 set1 set2

redis 127.0.0.1:6379> sinterstore myset5 myset2 myset3 (integer) 1 
redis 127.0.0.1:6379> smembers myset5 1) "two"
redis 127.0.0.1:6379>

sunion

返回set1和set2的并集

语法:sunion set1 set2

redis 127.0.0.1:6379> sunion myset2 myset3 1) "three" 
2) "one"
3
) "two"
redis 127.0.0.1:6379>

sunionstore

并集并保存到set3

语法:sunionstore set1 set2 set3

redis 127.0.0.1:6379> sunionstore myset6 myset2 myset3 (integer) 3 
redis 127.0.0.1:6379> smembers myset6 1) "three"
2) "one"
3
) "two"
redis 127.0.0.1:6379>

smove

从set1移动到set2

语法:smove set1 set2

redis 127.0.0.1:6379> smove myset2 myset7 three (integer) 1 
redis 127.0.0.1:6379> smembers myset7 1) "three"
redis 127.0.0.1:6379>

scard

返回名称为key的set的元素个数

语法:scard key

redis 127.0.0.1:6379> scard myset2 (integer) 1 
redis 127.0.0.1:6379>

sismemeber

member是否是key对应set的元素

语法:sismember key element

redis 127.0.0.1:6379> smembers myset2 1) "two" 
redis 127.0.0.1:6379> sismember myset2 two (integer) 1
redis 127.0.0.1:6379> sismember myset2 one (integer) 0
redis 127.0.0.1:6379>

srangemember

随机返回key对应set的一个元素,但不删除

语法:srangemember key

redis 127.0.0.1:6379> smembers myset3 1) "two" 
2
) "one"
redis 127.0.0.1:6379> srandmember myset3 "two"
redis 127.0.0.1:6379> srandmember myset3 "one"
redis 127.0.0.1:6379>



   扫一扫,通过微信也能学习



1 0
原创粉丝点击