redis–06–操作–Set
1、简介
- Redis的Set是string类型的无序集合。它底层其实是一个value为null的hash表,所以添加,删除,查找的复杂度都是O(1)。
- 集合元素不能重复
- 可以统计访问网站的所有独立ip。
2、数据结构
Set数据结构是dict字典,字典是用哈希表实现的。
Java中HashSet的内部实现使用的是HashMap,只不过所有的value都指向同一个对象。
Redis的set结构也是一样,它的内部也使用hash结构,所有的value都指向同一个内部值。
3、操作
3.1 sadd key value1 value2
往集合key中增加元素
127.0.0.1:6379> sadd num 1 2 3 4
(integer) 4
127.0.0.1:6379> smembers num
1) "1"
2) "2"
3) "3"
4) "4"
3.2 srem key value1 value2
- 删除集合key中值为 value1 value2的元素
- 返回值: 返回真正删除掉的元素的个数
127.0.0.1:6379> srem num 1 5
(integer) 1
127.0.0.1:6379> smembers num
1) "2"
2) "3"
3) "4"
3.3 spop key
随机删除集合key中1个元素,并返回该元素
127.0.0.1:6379> sadd num 1 2 3 4
(integer) 1
127.0.0.1:6379> spop num
"4"
127.0.0.1:6379> spop num
"1"
127.0.0.1:6379> spop num
"3"
127.0.0.1:6379> spop num
"2"
# 已经删光了元素
127.0.0.1:6379> spop num
(nil)
127.0.0.1:6379>
3.4 srandmember key[count]
- 集合key中,随机返回1个元素.
- count>0:
- 随机返回count个不重复的元素,如果count>集合的元素个数,返回所有元素
- count<0:
- 随机返回count个元素(可重复)
127.0.0.1:6379> srandmember num
"2"
3.5 sismember key value
- 判断value是否在key集合中,
- 是:返回1
- 否:返回0
127.0.0.1:6379> sismember num 1
(integer) 1
3.6 smembers key
返回集中中所有的元素
127.0.0.1:6379> sadd num 1 2 3 4
(integer) 4
127.0.0.1:6379> smembers num
1) "1"
2) "2"
3) "3"
4) "4"
3.7 scard key
返回集合中元素的个数
127.0.0.1:6379> sadd num 1 2 3 4
(integer) 4
127.0.0.1:6379> scard num
(integer) 4
3.8 smove source dest value
把source中的value删除,并添加到dest集合中
127.0.0.1:6379> sadd num 1 2 3 4
(integer) 4
127.0.0.1:6379> sadd str a b c d
(integer) 4
127.0.0.1:6379> smove num str 1
(integer) 1
127.0.0.1:6379> smembers num
1) "2"
2) "3"
3) "4"
127.0.0.1:6379> smembers str
1) "b"
2) "a"
3) "d"
4) "c"
5) "1"
3.9 sinter key1 key2 key3
求出key1 key2 key3 三个集合中的交集,并返回
127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> sadd str1 a b c d
(integer) 4
127.0.0.1:6379> sadd str2 a b c d e f g
(integer) 7
127.0.0.1:6379> sinter str1 str2
1) "b"
2) "a"
3) "d"
4) "c"
3.10 sinterstore dest key1 key2 key3
求出key1 key2 key3 三个集合中的交集,并赋给dest
127.0.0.1:6379> sadd str1 a b c d
(integer) 4
127.0.0.1:6379> sadd str2 a b c d e f g
(integer) 7
127.0.0.1:6379> sinterstore dest str1 str2
(integer) 4
127.0.0.1:6379> smembers dest
1) "a"
2) "b"
3) "c"
4) "d"
3.11 sunion key1 key2… Keyn
求出key1 key2 keyn的并集,并返回
127.0.0.1:6379> sadd str1 a b c d
(integer) 4
127.0.0.1:6379> sadd str2 a b c d e f g
(integer) 7
127.0.0.1:6379> sunion str1 str2
1) "e"
2) "d"
3) "c"
4) "f"
5) "b"
6) "a"
7) "g"
3.12 sdiff key1 key2 key3
求出key1与key2 key3的差集
即key1-key2-key3
127.0.0.1:6379> sadd str1 a b c d
(integer) 4
127.0.0.1:6379> sadd str2 a b c d e f g
(integer) 7
127.0.0.1:6379> sdiff str2 str1
1) "f"
2) "e"
3) "g"