集合set
-
集合中不允许有重复元素
-
元素是无序的,不能通过索引下标获取元素
-
1:命令--集合内操作
-
添加元素 sadd key element [element ...]
127.0.0.1:6379> exists myset #检查key是否存在 (integer) 0 127.0.0.1:6379> sadd myset a b c #添加 (integer) 3 127.0.0.1:6379> sadd myset a b #不能添加重复元素 (integer) 0 #O(k),k是元素的个数
-
删除元素 srem key element [element ...]
127.0.0.1:6379> srem myset a b (integer) 2 127.0.0.1:6379> srem myset hello # 删除不存在的值 (integer) 0 #O(k),k是元素的个数
-
计算元素的个数 scard key
127.0.0.1:6379> scard myset (integer) 1
-
判断元素是否在集合中 sismember key element
127.0.0.1:6379> sismember myset c (integer) 1 127.0.0.1:6379> smembers myset #查看集合中所有元素 1) "c"
-
随机从集合中返回指定个数的元素,默认值是1 srandmember key [count]
127.0.0.1:6379> smembers myset 1) "e" 2) "a" 3) "c" 4) "b" 127.0.0.1:6379> srandmember myset --不删除元素 "a" 127.0.0.1:6379> srandmember myset 3 1) "c" 2) "a" 3) "b" 127.0.0.1:6379> smembers myset 1) "e" 2) "a" 3) "c" 4) "b" #O(count)
-
从集合中随机弹出元素 spop key
127.0.0.1:6379> spop myset --弹出了,相当于从元素中删除这个元素 "b" 127.0.0.1:6379> spop myset "e" 127.0.0.1:6379> smembers myset #弹出之后集合中的元素 1) "a" 2) "c"
-
获取集合中所有的元素
-
127.0.0.1:6379> smembers myset 1) "a" 2) "c" #O(n),n是元素的个数
-
-
2集合间操作
创建2个集合
127.0.0.1:6379> sadd user:1:follow it music his sports (integer) 4 127.0.0.1:6379> sadd user:2:follow it news ent sports (integer) 4
-
交集 sinter key [key ..]
127.0.0.1:6379> sinter user:1:follow user:2:follow 1) "sports" 2) "it" #O(m*k):m是键的个数,k是多个集合中元素最少的个数
-
并集
127.0.0.1:6379> sunion user:1:follow user:2:follow 1) "ent" 2) "sports" 3) "news" 4) "it" 5) "his" 6) "music" #O(k),k是多个集合元素的个数和
-
差集
127.0.0.1:6379> sdiff user:1:follow user:2:follow 1) "music" 2) "his" #O(k),k是多个集合元素的个数和
-
将交集,并集,差集的结果保存到指定的集合类型中
-
sinterstore destination key [key...
-
sunionstore destination key [key...]
-
sdiffstore destination key [key...]
127.0.0.1:6379> sinterstore user:1_2:inter user:1:follow user:2:follow (integer) 2 127.0.0.1:6379> type user:1_2:inter set 127.0.0.1:6379> smembers user:1_2:inter 1) "sports" 2) "it"
-