set是集合,和数学中的集合类似, 集合的操作有添加,删除,还有对多个集合求交集,并集,差集等操作, 操作中key理解为集合的名字.
redis的set是string类型的无序集合. 通过hash table 实现的,所以添加,删除和查找的时间复杂度都是o(1).
set的相关操作如下:
1.sadd //向名称为key的set中添加元素
sadd myset name
输出:(integer)1 //添加成功
2.smembers //获取名称为key的set的所有member.
smembers myset
输出:1)"name"
2.srem //删除名称为key的set中的元素member
srem myset name
输出:(integer)1 //删除成功
3.spop //随机返回并删除名称为key的set中一个元素.
sadd myset name1
sadd myset name2
sadd myset name3
smembers myset
输出:1)"name2"
输出:2)"name3"
输出:3)"name1"
4.spop //随机返回并删除名称为key的set中一个元素
spop myset 输出:"name2"
5.sdiff //返回所有给定key与第一个key的差集(差集: 所有属于A集合且不属于B集合的元素构成的集合)
sadd myset2 name1
sadd myset2 sex
sadd myset2 work
sdiff myset myset2
输出:1)"name3"
6.sdiffstore //返回所有给定key于第一个key的差集,并将结果存为另一个key.
sadd user hou1
sadd user hou2
sadd user hou3
sadd user1 hou1
sadd user1 hou4
sadd user1 hou5
sdiffstore user_diff user user1
smembers user_diff
输出:1)"hou2"
输出:2)"hou3"
7.sinter //返回所有给定key的交集(由所有属于集合A且属于集合B的元素所组成的集合叫交集. 网络伟大!)
sinter user user1
输出:1)"hou1"
8.sinterstore //返回所有给定key的交集,并将结果存为另一个key
sinterstore user_inter user user1
smembers user_inter
输出:1)"hou1"
9.sunion //返回所有给定key的并集(A集合和B集合的并集是所有A的元素和所有B的元素而且没有其他元素的集合)
sunion user user1
输出:1)"hou5"
输出:2)"hou1"
输出:3)"hou3"
输出:4)"hou2"
输出:5)"hou4"
10.smove //从第一个key对应的set中移除member并添加到第二个对应set中
smove user user1 hou2
smembers user
输出:1)"hou3"
输出:2)"hou1"
11.scard //返回名称为key的set的元素的个数.
scard user
输出:(integer)2
12. sismember //测试member是否是名称为key的set的元素
sismember user hou1
输出:(integer)1 //hou1是user的member
13.srandmember //随机返回名称为key的set的一个元素,但不是删除元素
srandmember user 2
输出:1)"hou1"
输出:2)"hou3"
14.sunionstore //返回所有给定key的并集,并将结果存为另一个key
sunionstore user_unst user user1
smembers user_unst
输出:1)"hou5"
输出:2)"hou1"
输出:3)"hou3"
scard user
输出:(integer)2