set作为一种集合,可以添加删除元素,有对多个集合求交并差等操作.set是通过hash table实现的,所以添加,删除和查找的复杂度都是O(1).hash table会随着添加或者删除自动调整大小.需要注意的是调整hash table大小时候需要同步,会阻塞其他读写操作.
sadd
向名称为key的set中添加元素
sadd myset "helo"
向myset中添加了三个元素,但是由于第三个元素跟第二个元素是相同的,所以,第三个元素没有添加成功,最后我们用smembers来查看没有set中的所有元素.
srem
删除名称为key的set中的元素member
srem myset2 "one"
image.png
向myset2中添加了三个元素后,再调用srem来删除one和four,但是由于元素中没有four,因此词条srem命令执行失败.
spop
随机返回并删除名称为key的set中一个元素
spop myset3
image.png
想myset3中添加了三个元素后,再调用spop来随机删除一个元素,可以看到one元素被删除了.
sdiff
返回所有给定key与第一个key的差集
sdiff myset2 myset3
image.png
因为myset2和myset3中元素相同,所以差集是空的.
sdiffstore
返回所有给定的key与第一个key的差集,将结果存为另一个key
sdiffstore myset4 myset2 myset3
image.png
将myset2和myset3的差集存入myset4
sinter
返回所有给定key的交集
sinter myset2 myset3
image.png
sinterstore
返回所有给定key的交集,将结果存为另一个key
image.png
myset2和myset3的交集被保存到myset5中去了
sunion
返回所有给定key的并集
image.png
sunionstore
返回所给定key的并集,并将结果返回另一个key
sunionstore myset6 myset2 myset3
image.png
myset2和myset3的并集被保存到myset6中了
smove
smove myset2 myset7 three
从第一个key对应的set中移除member并添加到第二个对应set中
image.png
myset2的three被移到myset7中了
scard
返回名称为key的set元素的个数
scard myset2
image.png
sismember
测试member是否是名称为key的set元素
sismember myset2 four
image.png
four是myset2的成员,而three不是
srandmember
随机返回名称为key的set的一个元素,但是不删除元素
srandmember myset2
image.png
网友评论