上文介绍的list列表是有序集合,可以保存重复记录,在Redis中的Set集合是无序的,不可以存储重复记录的。本文主要介绍Set集合中的常用命令
集合中最大的成员数为 232 - 1 (4294967295, 每个集合可存储40多亿个成员)。
SADD
添加一个或多个元素到集合中,如果集合中存在该元素则忽略
127.0.0.1:6379> sadd stu zhangsan lisi wangwu lisi zhangsan (integer) 3
添加了5个元素,但只成功了3个,因为有两个是相同的。
SCard
返回set集合中元素的个数
127.0.0.1:6379> scard stu (integer) 3
SIsMember
判断集合中是否含有某元素
127.0.0.1:6379> sismember stu zhangsan (integer) 1 # 含有zhangsan 127.0.0.1:6379> sismember stu zhangsan1 (integer) 0 # 不含有zhangsan1
SMembers
获取集合中的所有的元素
127.0.0.1:6379> smembers stu 1) "lisi" 2) "zhangsan" 3) "wangwu"
SRem
删除集合中指定的元素,如果集合中不含有该元素,则忽略,返回0
127.0.0.1:6379> srem stu lisi (integer) 1 127.0.0.1:6379> srem stu aa (integer) 0 # 集合中不含有 aa 返回0 127.0.0.1:6379> smembers stu 1) "zhangsan" 2) "wangwu"
SRandMember
随机返回集合中的元素,redis2.6之后可以在命令后加一个count参数,指定随机返回的元素的个数,如果count大于集合中的个数,则返回所有的元素。负数的话取绝对值
127.0.0.1:6379> srandmember stu "zhangsan" # 取一个随机值 127.0.0.1:6379> srandmember stu "bobo" 127.0.0.1:6379> srandmember stu "dpb" 127.0.0.1:6379> srandmember stu 3 1) "bobo" #取三个随机值 2) "dpb" 3) "wangwu" 127.0.0.1:6379> srandmember stu 3 1) "bobo" 2) "dpb" 3) "lisi" 127.0.0.1:6379> srandmember stu 100 1) "lisi" # 大于总的个数,去所有值 2) "dpb" 3) "bobo" 4) "zhangsan" 5) "wangwu" 127.0.0.1:6379> srandmember stu -2 1) "dpb" # 负数取绝对值 两个 2) "zhangsan" 127.0.0.1:6379> srandmember stu -2 1) "lisi" 2) "dpb"
Spop
和srandmember类似,只是spop会将获取的元素移除而srandmember不会移除元素|
127.0.0.1:6379> smembers stu 1) "bobo" 2) "zhangsan" 3) "dpb" 4) "lisi" 5) "wangwu" 127.0.0.1:6379> spop stu 2 1) "zhangsan" # 随机获取两个元素并移除 2) "dpb" 127.0.0.1:6379> smembers stu 1) "bobo" 2) "lisi" 3) "wangwu"
SMove
将元素从一个集合移动到另一个集合中
127.0.0.1:6379> smembers stu 1) "bobo" 2) "lisi" 3) "wangwu" 127.0.0.1:6379> 127.0.0.1:6379> smove stu stu1 bobo (integer) 1 127.0.0.1:6379> smembers stu 1) "lisi" 2) "wangwu" 127.0.0.1:6379> smembers stu1 1) "bobo"
SDiff
返回两个集合的差集
127.0.0.1:6379> smembers stu 1) "lisi" 2) "wangwu" 127.0.0.1:6379> smembers stu1 1) "bobo" 127.0.0.1:6379> sdiff stu stu1 1) "lisi" 2) "wangwu" 127.0.0.1:6379> sdiff stu1 stu 1) "bobo"
SDiffStore
和sdiff类似,不同的是会将差集结果保存起来
127.0.0.1:6379> sdiffstore stu2 stu1 stu (integer) 1 127.0.0.1:6379> smembers stu2 1) "bobo"
SInter
获取两个集合的交集
127.0.0.1:6379> smembers stu 1) "lisi" 2) "wangwu" 127.0.0.1:6379> smembers stu2 1) "lisi" 2) "bobo" 127.0.0.1:6379> sinter stu stu2 1) "lisi" #两个集合中都有lisi
SInterStore
获取两个集合的交接并将结果保存起来了。
127.0.0.1:6379> sinterstore stu3 stu stu2 (integer) 1 127.0.0.1:6379> smembers stu3 1) "lisi"
SUnion
获取两个集合的并集。
127.0.0.1:6379> sunion stu stu2 1) "bobo" 2) "lisi" 3) "wangwu"
SunionStore
获取两个集合的并集并保存起来
127.0.0.1:6379> sunionstore stu3 stu stu2 (integer) 3 127.0.0.1:6379> smembers stu3 1) "bobo" 2) "lisi" 3) "wangwu"
~好了本文到此为止