在昨天的文章中,我們已經探討了 Redis 中的三個基本資料型態:String、List 和 Hash。這些資料型態提供了存儲和操作數據的基礎功能。但 Redis 的功能遠不止於此。今天,我們要深入探討另外兩個重要的資料型態:Sets 和 Sorted sets
Sets 是一個不包含重複元素且沒有特定順序的集合,並可以快速地添加、刪除或檢查元素是否存在於集合中
SADD
用於向集合中添加一個或多個元素,而 SMEMBERS
用於取得集合中的所有元素
127.0.0.1:6379> SADD colors red blue green
(integer) 3
127.0.0.1:6379> SMEMBERS colors
1) "red"
2) "blue"
3) "green"
檢查一個元素是否存在於集合中
127.0.0.1:6379> SISMEMBER colors red
(integer) 1 --存在就會回傳 1
127.0.0.1:6379> SISMEMBER colors yellow
(integer) 0 --不存在就會回傳 0
獲取集合中的元素數量
127.0.0.1:6379> SCARD colors
(integer) 3
從集合中移除一個或多個元素。
127.0.0.1:6379> SREM colors blue
(integer) 1
127.0.0.1:6379> SMEMBERS colors
1) "red"
2) "green"
用於計算多個集合之間的交集,會回傳包含所有給定集合中共同存在的元素的集合
127.0.0.1:6379> SADD eventA "John" "Mike" "Jane"
(integer) 3
127.0.0.1:6379> SADD eventB "Mike" "Tom" "Jane"
(integer) 3
127.0.0.1:6379> SINTER eventA eventB
1) "Mike"
2) "Jane"
用於計算多個集合的聯集。會回傳一個集合,包含所有給定集合中的元素,重複的元素只會出現一次
127.0.0.1:6379> SADD eventA "John" "Mike" "Jane"
(integer) 3
127.0.0.1:6379> SADD eventB "Mike" "Tom" "Jane"
(integer) 3
127.0.0.1:6379> SUNION eventA eventB
1) "John"
2) "Mike"
3) "Jane"
4) "Tom"
用於計算兩個或多個集合之間的差集。也是會回傳一個集合,包含存在於第一個集合且不在其他集合中的元素
127.0.0.1:6379> SADD eventA "John" "Mike" "Jane"
(integer) 3
127.0.0.1:6379> SADD eventB "Mike" "Tom" "Jane"
(integer) 3
127.0.0.1:6379> SDIFF eventA eventB
1) "John"
Sorted Sets 與 Sets 相似,但每個元素都有一個與之相關的分數,並且不能重複,使得元素在集合中按照分數的大小進行排序
將一個或多個元素及其分數添加到有序集合
127.0.0.1:6379> ZADD students 90 "John" 80 "Mike" 85 "Jane"
(integer) 3
ZRANGE: 根據分數從小到大取得有序集合中的元素
ZREVRANGE: 則是根據分數從大到小取得有序集合中的元素
127.0.0.1:6379> ZRANGE students 0 -1
1) "Mike"
2) "Jane"
3) "John"
-- 也可以在後面加上 WITHSCORES 會連分數也一起回傳
127.0.0.1:6379> ZRANGE students 0 -1 WITHSCORES
1) "Mike"
2) "80"
3) "Jane"
4) "85"
5) "John"
6) "90"
127.0.0.1:6379> ZREVRANGE students 0 -1 WITHSCORES
1) "John"
2) "90"
3) "Jane"
4) "85"
5) "Mike"
6) "80"
ZRANK
獲取元素在有序集合中的排名,而 ZSCORE
獲取元素的分數。
127.0.0.1:6379> ZRANK students John
(integer) 2
127.0.0.1:6379> ZSCORE students John
"90"
用於計算在有序集合中某一元素的反向排名。正常的排名是按分數從小到大排序,而反向排名則是從大到小。換句話說,分數最高的元素在 ZREVRANK 中的排名為 0
127.0.0.1:6379> ZREVRANK students John
(integer) 0
從有序集合中移除一個或多個元素。
127.0.0.1:6379> ZREM students Mike
(integer) 1
127.0.0.1:6379> ZRANGE students 0 -1
1) "Jane"
2) "John"