Set (集合)
Set的简介
Redis的set是String类型的无序集合,它底层其实是一个value为null的hash表,所以添加,删除,查找的复杂度都是o(1)
如果是o(1)数据增加,查找数据的时间不变
set常用方法
127.0.0.1:6379> sadd set a b c d e # 往set集合中添加元素
(integer) 5
127.0.0.1:6379> sadd set f
(integer) 1
127.0.0.1:6379> smembers set # 查看set集合中所有元素
1) "c"
2) "d"
3) "a"
4) "e"
5) "f"
6) "b"
127.0.0.1:6379> sismember set c # 判断set集合中是否有该元素
(integer) 1
127.0.0.1:6379> sismember set g
(integer) 0
127.0.0.1:6379> scard set #获取set集合的长度
(integer) 6
127.0.0.1:6379> smembers set
1) "c"
2) "e"
3) "a"
4) "d"
5) "f"
6) "b"
127.0.0.1:6379> srem set a g # 移除set集合中指定元素,只会移除存在的元素
(integer) 1
127.0.0.1:6379> smembers set
1) "c"
2) "e"
3) "d"
4) "f"
5) "b"
127.0.0.1:6379> srem set b c d e f
(integer) 5
set 无序不重合,可以抽随机
127.0.0.1:6379> smembers ser
1) "d"
2) "a"
3) "c"
4) "e"
5) "g"
6) "f"
7) "b"
127.0.0.1:6379> srandmember ser #在ser集合中随机抽取一个元素
"c"
127.0.0.1:6379> srandmember ser
"a"
127.0.0.1:6379> srandmember ser
"c"
127.0.0.1:6379> srandmember ser 2 # 在ser集合中随机抽取指定个数元素
1) "f"
2) "c"
# 随机移除元素
127.0.0.1:6379> smembers ser
1) "c"
2) "e"
3) "a"
4) "d"
5) "g"
6) "f"
7) "b"
127.0.0.1:6379> spop ser
"f"
127.0.0.1:6379> spop ser # 随机移除一个元素,也可以移除指定个数的元素
"b"
127.0.0.1:6379> spop ser
"e"
127.0.0.1:6379> sadd set a b c
(integer) 3
127.0.0.1:6379> sadd myset d
(integer) 1
127.0.0.1:6379> smove set myset c # 将一个指定的值,移动到另一个set集合中(只能移动一个元素)
(integer) 1
127.0.0.1:6379> smove set myset a b
(error) ERR wrong number of arguments for 'smove' command
127.0.0.1:6379> smembers set
1) "b"
2) "a"
127.0.0.1:6379> smembers myset
1) "c"
2) "d"
127.0.0.1:6379> sadd set a b c
(integer) 3
127.0.0.1:6379> sadd myset b c
(integer) 2
127.0.0.1:6379> smembers set
1) "b"
2) "c"
3) "a"
127.0.0.1:6379> smembers myset
1) "b"
2) "c"
127.0.0.1:6379> sdiff set myset # 两集合的差集
1) "a"
127.0.0.1:6379> sinter set myset # 两集合的交集
1) "b"
2) "c"
127.0.0.1:6379> sunion set myset # 两集合的并集
1) "b"
2) "c"
3) "a"
Set的数据结构
Set的数据结构是dict字典 字典使用哈希表实现的,内部使用hash结构

浙公网安备 33010602011771号