一、介紹:
在集合類型的基礎(chǔ)上有序集合類型為集合中的每個(gè)元素都關(guān)聯(lián)了一個(gè)分?jǐn)?shù)
這使得我們不僅可以完成插入、刪除和判斷元素是否存在等集合類型支持的操作,還能夠獲得分?jǐn)?shù)最高(或最低)的前N個(gè)元素、獲得指定分?jǐn)?shù)范圍內(nèi)的元素等與分?jǐn)?shù)有關(guān)的操作
雖然集合中每個(gè)元素都是不同的,但是它們的分?jǐn)?shù)卻可以相同。
-
有序集合類型在某些方面和列表類型有些相似
- 二者都是有序的
- 二者都可以獲得某一范圍的元素
-
有序集合類型和列表也有著很大的區(qū)別,這使得它們的應(yīng)用場景也是不同的
- 列表類型是通過鏈表實(shí)現(xiàn)的,獲取靠近兩端的數(shù)據(jù)速度極快,而當(dāng)元素增多后,訪問中間數(shù)據(jù)的速度會(huì)較慢,所以它更加適合實(shí)現(xiàn)如“新鮮事”或“日志”這樣很少訪問中間元素的應(yīng)用
- 有序集合類型是使用散列表和跳躍表(Skip list)實(shí)現(xiàn)的,所以即使讀取位于中間部分的數(shù)據(jù)速度也很快
- 列表中不能簡單地調(diào)整某個(gè)元素的位置,但是有序集合可以(通過更改這個(gè)元素的分?jǐn)?shù))
- 有序集合要比列表類型更耗費(fèi)內(nèi)存
二、命令:
| 命令 | 說明 |
|---|---|
| ZADD z value key | 加入元素 ZADD命令的返回值是新加入到集合中的元素個(gè)數(shù) 如果該元素已經(jīng)存在則會(huì)用新的分?jǐn)?shù)替換原有的分?jǐn)?shù) |
| ZRANGE z startNum endNum | 查看集合數(shù)據(jù),不帶分?jǐn)?shù) |
| ZRANGE z startNum endNum WITHSCORES | 查看集合數(shù)據(jù),帶分?jǐn)?shù) |
| ZSCORE z key | 獲得元素的分?jǐn)?shù) |
| ZRANGEBYSCORE z startScores endScores WITHSCORES | 獲得指定分?jǐn)?shù)范圍的元素 |
| ZINCRBY z value key | 增加某個(gè)元素的分?jǐn)?shù) |
| ZCARD z | 獲得集合中元素的數(shù)量 |
| ZCOUNT z startScores endScores | 獲得指定分?jǐn)?shù)范圍內(nèi)的元素個(gè)數(shù) |
| ZREM z key | 刪除元素 |
| ZRANK z key | 獲得元素的排名 升序排列,從0開始計(jì)數(shù) |
| ZREVRANK z key | 獲得元素的排名 降序排列,從0開始計(jì)數(shù) |
三、有序集合類型實(shí)踐
- 例:將博客文章按照點(diǎn)擊量排序
127.0.0.1:6379> ZADD posts:page.view 0 post:10:page.view
(integer) 1
127.0.0.1:6379> ZINCRBY posts:page.view 1 post:10:page.view
"1"
127.0.0.1:6379> ZRANGE posts:page.view 0 -1 WITHSCORES
1) "post:10:page.view"
2) "1"