Redis應用(五)---集合類型

介紹

Redis支持兩種集合分別是有序集合和無序集合

集合和列表之間的對比

集合類型 列表類型 有序集合類型
存儲內容 最多23212 ^ {32} - 1個字符串 最多23212 ^ {32} - 1個字符串 最多23212 ^ {32} - 1個字符串
有序性
唯一性

運用場景

集合常用的操作是向集合中加入或刪除元素;判斷元素是否存在;
在多個集合之間還可以進行交集、並集、差集運算。

命令

一、集合

1.增加/刪除元素
sadd key member [member …] :向集合添加元素,返回成功加入集合的個數
srem key member [member …] :刪除集合中的元素,返回成功刪除的個數

2.獲取集合中的所有元素
smembers key

3.判斷元素是否在集合中
sismember key member
存在返回1,不存在返回0

4.集合間運算
(1)差集
sdiff key [key…]
在這裏插入圖片描述
在這裏插入圖片描述

2.交集
sinter key [key…]
在這裏插入圖片描述
在這裏插入圖片描述
3.並集
sunion key [key …]

在這裏插入圖片描述

4.獲取集合中元素的個數
scard key
在這裏插入圖片描述
5.進行集合運算並將結果存儲
sdiffstore destination key [key …]
sinterstore destination key [key …]
sunionstore destination key [key …]
這個3個命令和之前的集合運算命令差不多,唯一的區別是不會返回運算結果,而是將結果放入destination鍵中。
這些命令常用於需要多步集合運算的場景,如先計算兩個集合的差集,再將結果和其他集合計算並集。

6.隨機獲取集合中的元素
srendmember key [count]
count 爲指定返回的元素個數

7.從集合中彈出一個元素
spop key 會從集合中隨機選擇一個元素彈出。

二、有序集合

redis的有序集合類型是在集合的基礎上爲每個元素都關聯了一個分數,從而實現有序

有序集合和列表在某些功能上是一致的
相似點:
(1)二者都是有序的
(2)二者都可以獲得某一範圍的元素

但是二者的應用場景有很大不同
(1)列表是通過鏈表實現的,獲取靠近兩邊的元素速度越快,當元素增多後,獲取中間的元素,速度會變慢,所以它更加適合實現“新鮮事”或“排行榜”的應用
(2)有序集合類型使用的是散列表和跳躍表(Skip list)實現的,所以即使讀取中間位置的數據,速度也是很快的。
(3)列表中不能簡單地改變元素的位置,有序集合可以(改變分數就行)
(4)有序集合要比列表更加耗費內存

1.增加元素
zadd key score member [score member …]
該命令向有序集合中加入元素和該元素的分數,如果集合中已經有了該元素,則用新的分數代替原有的分數。

比如我們用有序集合zset 存儲 “張三”,“李四”,“王五” 的工資。
在這裏插入圖片描述
假如此時發現李四的工資輸錯了,也可以修改
zadd zset 15000 李四

2.獲得元素的分數
zscore key member

3.獲得排名在某個範圍的元素列表
zrange key start stop [withscores]
該命令會按照元素的分數從小到大返回從索引start 到stop之間的元素(0 -1 表示返回所有的元素);
加上參數withscores 會將分數也一起返回
在這裏插入圖片描述
4.獲取指定分數範圍的元素
zrangebyscore key min max [withscores] [limit offset count]
該命令按照元素分數從小到大的順序返回分數在min和max之間的元素(包含min和max)
min和max 還可以用無窮大來表示 -inf 和 +inf 分別代表負無窮和正無窮
limit offset count 參數和數據庫的用法一樣,即在獲得元素的基礎上向後偏移offset個元素,並且只獲取前count個元素。

在有序集合zset中再添加點元素方便演示
在這裏插入圖片描述
獲取工資超過10003的人,如果希望分數範圍不包含斷點值可以加上“(”符號,如下表示不包含10003
在這裏插入圖片描述
獲取工資高於10000的從第2個人開始的3個人
在這裏插入圖片描述
zrevrangebyscore 正好相反,會按元素分數從大到小排列

5.獲取集合中元素的數量
zcard key

6.獲取指定分數範圍內的元素個數
zcount key min max

7.刪除一個或多個元素
zrem key member [member …]

8.按照排名範圍刪除元素
zremrangebyrank key start stop
按照元素分數從小到大的順序,刪除指定排名範圍內的所有元素。

9.按照分數範圍刪除元素
zremrangebyscore key min max
刪除指定分數範圍內的所有數據。

10.獲取元素的排名
zrank key member
從0開始,分數最小的元素排名爲0

zrevrank key member
分數最大的元素排名爲0

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章