標籤:redis 設計實現
1、有序集合是由散列表和跳躍表實現的,所以即使元素再多,擷取中間的元素速度也很快。
2、有序集合為集合中的每個元素都關聯了一個分數。
3、有序集合與列表的對比 相同點:
都是有序的,都可以擷取某一個範圍的元素 不同點: 1、列表是採用雙向鏈表實現的,所以擷取接近兩端的資料很快,擷取中間資料會很慢。 2、有序集合則採用的是散列表和跳躍表(百度好理解) 3、列表中不能調整某個元素的位置,但是集合可以,通過更改分數。 4、有序集合更耗費記憶體
4、ZADD 添加元素,返回新添加的個數 (不含已經有的) 127.0.0.1:6379> ZADD eng_score 85 klov 90 klov2 100 klov3 (integer) 3 如果元素已存在,則會用新的分數替換掉原有的分數,返回資料 0 127.0.0.1:6379> ZADD eng_score 99 klov
(integer) 0
127.0.0.1:6379> ZSCORE eng_score klov
"99"
5、ZSCORE 擷取元素的分數 127.0.0.1:6379> ZSCORE eng_score klov
"88"
6、分數不僅支援正數,還支援浮點數
7、獲得排名在某一範圍內的元素列表 ZRANGE key start stop [WITHSCORES] ------------從小到大的順序 ZREVRANGE key start stop [WITHSCORES]-------- 從大到小的順序 按照分數從小到大(大到小)的順序返回索引從start 到 stop之間的所有元素(包含兩端資料)。和LRANGE命令相似,索引都是從 0 開始,負數代表從後向前尋找(-1表示最後一個元素,所以 ZRANGE key 0 -1 就是擷取所有元素) 127.0.0.1:6379> ZRANGE eng_score 0 -1 WITHSCORES 1) "klov2"
2) "90"
3) "klov"
4) "99"
5) "klov3"
6) "100" 如果兩個元素的分數相同,則會按照字典順序返回 127.0.0.1:6379> ZRANGE eng_score 0 -1 WITHSCORES
1) "klov2"
2) "90"
3) "klov"
4) "99"
5) "angla"
6) "100"
7) "klov3"
8) "100"
8、獲得指定範圍的元素 ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count] 擷取的元素包含兩端min和max.如果不需要兩端可以執行: 127.0.0.1:6379> ZRANGEBYSCORE eng_score (60 (100 1) "klov2"
2) "klov"
還支援無窮大: -inf +inf
9、增加某個元素的分數:ZINCRBY key increment member 返回增加後的值 127.0.0.1:6379> ZINCRBY eng_score 50 klov3
"150"
六、Redis 基礎命令--有序集合