- 集合類型
Set 是一個(gè)無(wú)序并唯一的鍵值集合。
- 它的存儲(chǔ)順序不會(huì)按照插入的先后順序進(jìn)行存儲(chǔ)。
同列表的區(qū)別
- 列表可以存儲(chǔ)重復(fù)元素,集合只能存儲(chǔ)非重復(fù)元素;
- 列表是按照元素的先后順序存儲(chǔ)元素的,而集合則是無(wú)序方式存儲(chǔ)元素的;
redis-cli使用
- 添加一個(gè)或多個(gè)元素/查詢集合所有元素
127.0.0.1:6379> sadd like Anna Bob Bob Cat
(integer) 3
127.0.0.1:6379> smembers like
1) "Anna"
2) "Bob"
3) "Cat"
127.0.0.1:6379> scard like
(integer) 3
127.0.0.1:6379> sismember like Anna
(integer) 1
127.0.0.1:6379> sismember like John
(integer) 0
- 從一個(gè)集合中移動(dòng)一個(gè)元素到另一個(gè)集合
127.0.0.1:6379> smembers like
1) "Anna"
2) "Bob"
3) "Cat"
127.0.0.1:6379> smembers dislike
1) "Lee"
2) "Mary"
3) "Sasike"
127.0.0.1:6379> smove like dislike Cat
(integer) 1
127.0.0.1:6379> smembers like
1) "Anna"
2) "Bob"
127.0.0.1:6379> smembers dislike
1) "Lee"
2) "Mary"
3) "Cat"
4) "Sasike"
- 移除集合中一個(gè)或者多個(gè)元素, 不存在的元素將會(huì)被忽略
127.0.0.1:6379> smembers dislike
1) "Lee"
2) "Mary"
3) "Cat"
4) "Sasike"
127.0.0.1:6379> srem dislike Lee Cat
(integer) 2
127.0.0.1:6379> smembers dislike
1) "Mary"
2) "Sasike"
使用Jedis操作Set
public class RedisSet {
public static void main(String[] args) {
Jedis redis = ConnectRedis.getRedis();
Set<String> dislike = redis.smembers("dislike");
System.out.println(dislike);
redis.sadd("dislike","Hinata","Sakura","Gala");
dislike=redis.smembers("dislike");
System.out.println(dislike);
}
}
集合實(shí)現(xiàn)
- 當(dāng)所有元素都為整數(shù)時(shí),集合會(huì)以
intset 結(jié)構(gòu)進(jìn)行(數(shù)據(jù))存儲(chǔ);
- 當(dāng)元素為非整數(shù)時(shí),集合會(huì)使用
hashtable 進(jìn)行存儲(chǔ);
使用場(chǎng)景
- 微博關(guān)注我的人和我關(guān)注的人都適合用集合存儲(chǔ),可以保證人員不會(huì)重復(fù);
- 中獎(jiǎng)人信息也適合用集合類型存儲(chǔ),這樣可以保證一個(gè)人不會(huì)重復(fù)中獎(jiǎng);
更多操作命令
127.0.0.1:6379> smembers dislike
1) "Sakura"
2) "Mary"
3) "Hinata"
4) "Sasike"
5) "Gala"
127.0.0.1:6379> spop dislike 1
1) "Sakura"
127.0.0.1:6379> spop dislike 1
1) "Hinata"
127.0.0.1:6379> smembers dislike
1) "Gala"
2) "Mary"
3) "Sasike"
- 隨機(jī)返回集合中指定數(shù)量的元素列表
127.0.0.1:6379> smembers dislike
1) "Gala"
2) "Mary"
3) "Sasike"
127.0.0.1:6379> srandmember dislike 2
1) "Mary"
2) "Gala"
127.0.0.1:6379> sadd set1 a b c d e
(integer) 5
127.0.0.1:6379> sadd set2 a b f g h
(integer) 5
127.0.0.1:6379> sinter set1 set2
1) "a"
2) "b"
127.0.0.1:6379> sadd set1 a b c d e
(integer) 5
127.0.0.1:6379> sadd set2 a b f g h
(integer) 5
127.0.0.1:6379> sinterstore set3 set1 set2
(integer) 2
127.0.0.1:6379> smembers set3
1) "a"
2) "b"
127.0.0.1:6379> sunion set1 set2
1) "b"
2) "h"
3) "g"
4) "f"
5) "d"
6) "a"
7) "e"
8) "c"
- 查詢一個(gè)或者多個(gè)集合的并集并存儲(chǔ)
127.0.0.1:6379> sunionstore set4 set1 set2
(integer) 8
127.0.0.1:6379> smembers set4
1) "b"
2) "h"
3) "g"
4) "f"
5) "d"
6) "a"
7) "e"
8) "c"
- 查詢一個(gè)或者多個(gè)集合的錯(cuò)集
127.0.0.1:6379> smembers set1
1) "d"
2) "a"
3) "c"
4) "b"
5) "e"
127.0.0.1:6379> smembers set2
1) "b"
2) "h"
3) "f"
4) "g"
5) "a"
127.0.0.1:6379> sdiff set1 set2
1) "d"
2) "e"
3) "c"
- 查詢一個(gè)或者多個(gè)集合的錯(cuò)集并存儲(chǔ)
127.0.0.1:6379> sdiffstore set5 set1 set2
(integer) 3
127.0.0.1:6379> smembers set5
1) "d"
2) "e"
3) "c"