Redis探索之旅(10)- Redis資料結構之有序集合

DreamMakers發表於2016-09-16

在前面的部落格文章中,已經簡單的講述了Redis的常用資料型別資料結構,今天我們來對最後一個進行簡單說明,因為自身用的不多,因此這裡簡單說明一下。

有序集合,顧名思義,就是集合時有序的,預設情況下,怎麼才能保證有序呢?集合怎麼知道哪個元素在前,哪個元素在後呢?當然這個判定標準需要我們告訴Redis集合。怎麼去告訴Redis呢?很簡單,我們在日常開發過程中,其實對於兩個元素的排序,無非是根據這兩個元素的一些特性(屬性)的值的大小進行比較,小的在前,大的在後。這裡的有序集合也是採用同樣的處理辦法,就是給儲存到集合中的每個元素賦予一個值,根據這個值的大小比較來決定元素在集合中的順序。

首先我們來看看怎麼往有序集合中新增元素,新增元素分為一次新增一個,或者一次新增多個,寫法如下所示:


從截圖中我們通過兩種方式向sortedset有序集合中插入了若干元素,並且通過zange方法檢視了相應的元素。(zrange後面帶的數字其實是元素的順序標識,因為有序集合時有序的,預設情況下按照從小到大進行排序,那麼元素的順序應該是orange -> apple -> pear -> banana, 這時候如果對元素按照順序標識,那麼第一個元素是0, 第二個元素是1,依次類推...所以zrange sortedset 2 4 返回的就是pear和banana了,這裡只要記住zrange是以元素位置下表作為查詢引數就可以啦^_^,如果想按照從大到小的順序檢視,那麼就要使用zrevrange了...)

如果想知道有序集合中有多少元素?可以使用“zcard key名”。如果你不是簡簡單單想知道整個集合的元素數,而是想知道位於某個區間範圍的元素個數,那麼需要藉助另一個指令zcount,使用方法:zcount key名 min值 max值


可見,值位於2~4之間(閉包)的有三個元素,他們分別為apple、pear和banana。

如果你覺得資料有問題,也可以檢視你懷疑的那個元素的情況,使用zscore來檢視某個元素對應的值,如下所示:


如果你覺得這個值有問題,那麼你可以通過下面的方式修改元素的值,或者通過zadd重新設定元素的值。


這裡,我們通過zincrby命令給orange這個元素的值增加了5,從返回結果中可以看出,該元素對應的值已經變為6了。

按照上面更新之後,按理說元素的位置應該發生了變化,orange權值最大,應該在最後,apple最小,應該在最前,為了驗證,我們通過zrank和zrange來分別看看:

從返回結果看,順序的確發生了變化,orange變成了最後,且orange的位置索引為3。(-1表示右邊倒數第一個元素)

除了上面的所有操作以外,緊接著的集合內操作可能就是刪除了,這時候就要用ZREM及相關的其他一些根據排名、分數或者字典來進行刪除的命令了。

而其他的三個類似的刪除命令在名稱上很相近,都是ZREMRANGEBY***,只不過刪除的策略不同,所以名稱上有所不同,三個命令分別為ZREMRANGEBYLEX、ZREMRANGEBYRANK和ZREMRANGEBYSCORE。

至此,大多數關於有序集合的命令都簡單介紹完了,關於集合間的操作這裡就不做介紹了,有需要的請自行檢視官網。

相關文章