redis系列文章:
https://liudongdong.top/categories/redis
本篇來源:
https://liudongdong.top/archives/redisliu-redis-zhi-set
公眾號:雨中散步撒哈拉
備注:歡迎關(guān)注公眾號痪署,一起學(xué)習(xí),共同進(jìn)步!
一潘鲫、基本概念
Redis 的 Set 是 String 類型的無序集合。集合成員是唯一的肋杖,這就意味著集合中不能出現(xiàn)重復(fù)的數(shù)據(jù)溉仑。
集合對象的編碼可以是 intset 或者 hashtable。
Redis 中集合是通過哈希表實現(xiàn)的状植,所以添加浊竟,刪除,查找的復(fù)雜度都是 O(1)津畸。
集合中最大的成員數(shù)為 232 - 1 (4294967295, 每個集合可存儲40多億個成員)振定。
實例:
127.0.0.1:6379> sadd sets one two three
(integer) 3
127.0.0.1:6379> smembers sets
1) "three"
2) "one"
3) "two"
127.0.0.1:6379>
二、Set分類
根據(jù)個人理解和便于學(xué)習(xí)肉拓,進(jìn)行了簡單的分類后频!
大致分為以下幾類:
- 增加成員
- 刪除成員
- 修改成員
- 查詢成員
- 集合操作
1. 增加成員
- sadd:增加成員
2. 刪除成員
- spop:移除隨機(jī)成員
- srem:移除指定成員
3. 修改成員命令
- smove:移動成員到另一個集合中
4. 查詢成員
- scard:查詢成員總數(shù)
- sismember:查詢該成員是否存在
- smembers:查詢所有成員
- srandmember:返回集合一個或多個隨機(jī)數(shù)
5. 集合操作
- sdiff:倆個集合之間的差集
- sdiffstore:倆個集合之間的差集,結(jié)果放到新的set中
- sinter:倆個集合之間的交集
- sinterstore:倆個集合之間的交集暖途,結(jié)果放到新的set中
- sunion:倆個集合之間的并集
- sunionstore:倆個集合之間的并集卑惜,結(jié)果放到新的set中
三、命令實踐
1. 增加成員
127.0.0.1:6379> sadd sets one two three
(integer) 3
127.0.0.1:6379> smembers sets
1) "three"
2) "one"
3) "two"
127.0.0.1:6379>
2. 刪除成員
127.0.0.1:6379> smembers sets
1) "three"
2) "one"
3) "two"
# 刪除一個或多個隨機(jī)值
127.0.0.1:6379> spop sets 1
1) "three"
127.0.0.1:6379> smembers sets
1) "one"
2) "two"
# 移除指定成員
127.0.0.1:6379> srem sets one
(integer) 1
127.0.0.1:6379> smembers sets
1) "two"
127.0.0.1:6379>
3. 修改成員
127.0.0.1:6379> smembers sets
1) "two"
127.0.0.1:6379> sadd sets2 a
(integer) 1
127.0.0.1:6379> smembers sets2
1) "a"
# 修改成員驻售,到新的集合中
127.0.0.1:6379> smove sets sets2 two
(integer) 1
127.0.0.1:6379> smembers sets2
1) "a"
2) "two"
127.0.0.1:6379> smembers sets
(empty list or set)
127.0.0.1:6379>
4. 查詢成員
# 查詢成員總數(shù)
127.0.0.1:6379> scard sets2
(integer) 2
# 查詢集合所有成員
127.0.0.1:6379> smembers sets2
1) "a"
2) "two"
# 判斷成員是否存在集合中
127.0.0.1:6379> sismember sets2 one
(integer) 0
127.0.0.1:6379> sismember sets2 two
(integer) 1
# 返回集合中的一個或多個值
127.0.0.1:6379> srandmember sets2 1
1) "two"
127.0.0.1:6379> srandmember sets2 1
1) "two"
127.0.0.1:6379> srandmember sets2 2
1) "a"
2) "two"
127.0.0.1:6379>
5. 集合操作
1. 差集
Redis Sdiff 命令返回第一個集合與其他集合之間的差異露久,也可以認(rèn)為說第一個集合中獨有的元素。不存在的集合 key 將視為空集欺栗。
差集的結(jié)果來自前面的 FIRST_KEY ,而不是后面的 OTHER_KEY1毫痕,也不是整個 FIRST_KEY OTHER_KEY1..OTHER_KEYN 的差集征峦。
127.0.0.1:6379> smembers sets
1) "c"
2) "a"
3) "b"
127.0.0.1:6379> smembers sets2
1) "a"
2) "two"
127.0.0.1:6379> sdiff sets sets2
1) "c"
2) "b"
127.0.0.1:6379> sadd sets3 1
(integer) 1
127.0.0.1:6379> sdiffstore sets3 sets sets2
(integer) 2
127.0.0.1:6379> smembers sets3
1) "c"
2) "b"
127.0.0.1:6379>
2. 交集
Redis Sinter 命令返回給定所有給定集合的交集。 不存在的集合 key 被視為空集消请。 當(dāng)給定集合當(dāng)中有一個空集時栏笆,結(jié)果也為空集(根據(jù)集合運算定律)。
127.0.0.1:6379> smembers sets
1) "c"
2) "a"
3) "b"
127.0.0.1:6379> smembers sets2
1) "a"
2) "two"
127.0.0.1:6379> smembers sets3
1) "c"
2) "b"
127.0.0.1:6379> sinter sets sets2
1) "a"
127.0.0.1:6379> sinterstore sets3 sets sets2
(integer) 1
127.0.0.1:6379> smembers sets3
1) "a"
127.0.0.1:6379>
3. 并集
Redis Sunion 命令返回給定集合的并集梯啤。不存在的集合 key 被視為空集竖伯。
127.0.0.1:6379> smembers sets
1) "c"
2) "a"
3) "b"
127.0.0.1:6379> smembers sets2
1) "a"
2) "two"
127.0.0.1:6379> smembers sets3
1) "a"
127.0.0.1:6379> sunion sets sets2
1) "a"
2) "c"
3) "two"
4) "b"
127.0.0.1:6379> sunionstore sets3 sets sets2
(integer) 4
127.0.0.1:6379> smembers sets3
1) "a"
2) "c"
3) "two"
4) "b"
127.0.0.1:6379>
附錄
下表列出了 Redis 集合基本命令:
序號 | 命令及描述 |
---|---|
1 | [SADD key member1 member2] 向集合添加一個或多個成員 |
2 | SCARD key 獲取集合的成員數(shù) |
3 | [SDIFF key1 key2] 返回第一個集合與其他集合之間的差異存哲。 |
4 | [SDIFFSTORE destination key1 key2] 返回給定所有集合的差集并存儲在 destination 中 |
5 | [SINTER key1 key2] 返回給定所有集合的交集 |
6 | [SINTERSTORE destination key1 key2] 返回給定所有集合的交集并存儲在 destination 中 |
7 | SISMEMBER key member 判斷 member 元素是否是集合 key 的成員 |
8 | SMEMBERS key 返回集合中的所有成員 |
9 | SMOVE source destination member 將 member 元素從 source 集合移動到 destination 集合 |
10 | SPOP key 移除并返回集合中的一個隨機(jī)元素 |
11 | [SRANDMEMBER key count] 返回集合中一個或多個隨機(jī)數(shù) |
12 | [SREM key member1 member2] 移除集合中一個或多個成員 |
13 | [SUNION key1 key2] 返回所有給定集合的并集 |
14 | [SUNIONSTORE destination key1 key2] 所有給定集合的并集存儲在 destination 集合中 |
15 | [SSCAN key cursor MATCH pattern] [COUNT count] 迭代集合中的元素 |