sets类型
sets类型以及操作
Set是无序集合,它是string类型的无序集合。set是通过hash table实现的,添加、删除和查找的复杂度都是0(1)。对集合我们可以取并集、交集、差集。通过这些操作我们可以实现sns中的好友推荐和blog的tag功能。
sadd
向名称为key的set中添加元素,返回添加成功的个数
127.0.0.1:6379> sadd key member [member ...] 127.0.0.1:6379> sadd myset1 one (integer) 1 127.0.0.1:6379> sadd myset1 two three (integer) 2
smembers
查看集合元素
127.0.0.1:6379> smembers key 127.0.0.1:6379> smembers myset1 1) "one" 2) "two" 3) "three"
srem
删除名称为key的set中元素,返回成功执行的个数
127.0.0.1:6379> srem key member [member ...] 127.0.0.1:6379> srem myset1 one (integer) 1 127.0.0.1:6379> smembers myset1 1) "two" 2) "three"
spop
随机返回并删除名称为key的set中的一个元素
spop key [count] 127.0.0.1:6379> spop myset1 2 1) "two" 2) "three" 127.0.0.1:6379> smembers myset1 (empty list or set)
sdiff
返回所有给定key与第一个key的差集
谁在前面以谁为标准,返回其他集合少于标准的
127.0.0.1:6379> sdiff key [key ...] 127.0.0.1:6379> smembers myset2 1) "two" 2) "four" 3) "three" 127.0.0.1:6379> smembers myset1 1) "one" 2) "two" 3) "three" 127.0.0.1:6379> sdiff myset1 myset2 1) "one" 127.0.0.1:6379> sdiff myset2 myset1 1) "four"
sdiffstore
返回两个集合的差集,并将差集存储到另一个集合里面
127.0.0.1:6379> sdiffstore destination key [key ...] 127.0.0.1:6379> sdiffstore myset3 myset1 (integer) 3 127.0.0.1:6379> smembers myset3 1) "one" 2) "two" 3) "three" 127.0.0.1:6379> sdiff myset4 myset1 myset2 (empty list or set) 127.0.0.1:6379> smembers myset1 1) "one" 2) "two" 3) "three" 127.0.0.1:6379> smembers myset2 1) "two" 2) "four" 3) "three" 127.0.0.1:6379> sdiffstore myset4 myset1 myset2 (integer) 1 127.0.0.1:6379> smembers myset4 1) "one"
sinter
返回所有给定key的交集
127.0.0.1:6379> sinter key [key ...] 127.0.0.1:6379> smembers myset1 1) "one" 2) "two" 3) "three" 127.0.0.1:6379> smembers myset2 1) "two" 2) "four" 3) "three" 127.0.0.1:6379> sinter myset1 myset2 1) "two" 2) "three"
sinterstore
返回两个集合的交集并且储存在指定集合内
127.0.0.1:6379> sinterstore destination key [key ...] 127.0.0.1:6379> sinterstore myset4 myset1 myset2 (integer) 2 127.0.0.1:6379> smembers myset4 1) "two" 2) "three"
sunion
返回所有给定集合的并集
127.0.0.1:6379> sunion key [key ...] 127.0.0.1:6379> smembers myset1 1) "one" 2) "two" 3) "three" 127.0.0.1:6379> smembers myset2 1) "two" 2) "four" 3) "three" 127.0.0.1:6379> sunion myset1 myset2 1) "one" 2) "two" 3) "four" 4) "three"
sunionstrore
返回给顶集合的并集,并且存储在另一个集合
127.0.0.1:6379> sunionstore destination key [key ...] 127.0.0.1:6379> sunionstore myset5 myset1 myset2 (integer) 4 127.0.0.1:6379> smembers myset5 1) "one" 2) "two" 3) "four" 4) "three"
smove
从个一的个key中的对应的set中移除member并添加到第二个对应的set中
127.0.0.1:6379> smove source destination member 127.0.0.1:6379> smembers myset1 1) "one" 2) "two" 127.0.0.1:6379> smembers myset2 1) "two" 2) "four" 3) "three" 127.0.0.1:6379> smove myset1 myset2 one (integer) 1 127.0.0.1:6379> smembers myset1 1) "two" 127.0.0.1:6379> smembers myset2 1) "one" 2) "two" 3) "four" 4) "three"
scard
返回名称为key的集合中的集合的个数
127.0.0.1:6379> scard key 127.0.0.1:6379> scard myset1 (integer) 1 127.0.0.1:6379> scard myset2 (integer) 4
sismember
测试某个元素是不是某个集合的元素
127.0.0.1:6379> sismember key member 127.0.0.1:6379> sismember myset1 one (integer) 0 127.0.0.1:6379> sismember myset two (integer) 0 127.0.0.1:6379> smembers myset1 1) "two" 127.0.0.1:6379> sismember myset1 two (integer) 1
srandmember
随机返回集合中的一个元素,但不删除
127.0.0.1:6379> srandmember key [count] 127.0.0.1:6379> srandmember myset2 "four" 127.0.0.1:6379> srandmember myset2 "one" 127.0.0.1:6379> srandmember myset2 6 1) "one" 2) "two" 3) "three" 4) "four"