sorted set是set的乙個公升級版本,它在set的基礎上增加了乙個順序屬性,這一屬性在新增修改元素的時候可以指定,每次指定後,zset會自動重新按新的值調整順序。可以理解為有兩列的mysql表,一列存value,一列存順序。操作中key理解為zset的名字。
和set一樣sorted set也是string型別元素的集合,不同的是每個元素都會關聯乙個double型別的score。sorted set的實現是skip list和hash table的混合體。
當元素被新增到集合中時,乙個元素到score的對映被新增到hash table中,所以給定乙個元素獲取score的開銷是o(1),另乙個score到元素的對映被新增到skip list,並按照score排序,所以就可以有序的獲取集合中的元素。新增,刪除操作開銷都是o(log(n))和skip list的開銷一致,redis的skip list實現用的是雙向鍊錶,這樣就可以逆序從尾部取元素。sorted set最經常的使用方式應該是作為索引來使用.我們可以把要排序的字段作為score儲存,物件的id當元素儲存。
zadd
向名稱為key的zset中新增元素member,score用於排序。如果該元素已經存在,則根據score更新該元素的順序
zadd key [nx|xx] [ch] [incr] score member [score member …]
其中:
-nx:不更新存在的成員,只新增新成員
-xx:僅僅更新存在的成員,不新增新成員
-ch:修改返回值為發生變化的成員總數,原始是返回新新增成員的總數(ch是change的意思)。更改的元素是新新增的成員,已經存在的成員更新分數。所以在命令中指定的成員有相同的分數將不被計算在內。注:在通常情況下,zadd返回值只計算新新增成員的數量
-incr:當zadd指定這個選項時,成員的操作就等同zincrby命令,對成員的分數進行遞增操作。
zrem
刪除名稱為key的zset中的元素member
zrem key member [member …]
zincrby
如果在名稱為key的zset中已經存在元素member,則該元素的score增加increment;否則向集合中新增該元素,其score的值為increment
zrank
返回名稱為key的zset中member元素的排名(按score從小到大排序)即下標
zrank key member
zrange
顯示名稱為key的所選範圍的member(和score)
zrange key start stop [withscores]
zrevrank
返回名稱為key的zset中member元素的排名(按score從大到小排序)即下標
zrevrank key member
zrevrange
返回名稱為key的zset(按score從大到小排序)中的index從start到end的所有元素
zrevrange key start stop [withscores]
zrangebyscore
返回集合中score在給定區間的元素
zrangebyscore key min max [withscores]
zcount
返回集合中score在給定區間的數量
zcount key min max
zcard
在是集合中元素個數
zcard key
zscore
返回給定元素列印的score
zscore key member
zremrangebyrank
刪除集合中排名在給定區間的元素
zremrangebyrank key start stop
zremrangebyscore
刪除集合中score在給定區間的元素
zrmemrangebyscore key start stop
redis資料型別之sorted set
sorted set型別資料的基本操作 刪除資料 按條件獲取資料 條件刪除資料 獲取集合資料總量 集合交 並操作 zinterstore destination numkeys key key.zunionstore destination numkeys key key.sorted set型別資...
Redis之6 sorted set型別詳解
redis 有序集合和集合一樣也是string型別元素的集合,且不允許重複的成員。不同的是每個元素都會關聯乙個double型別的分數。redis正是通過分數來為集合中的成員進行從小到大的排序。有序集合的成員是唯一的,但分數 score 卻可以重複。集合是通過雜湊表實現的,所以新增,刪除,查詢的複雜度...
Redis 有序集合 sorted set
redis 有序集合和集合一樣也是string型別元素的集合,且不允許重複的成員。不同的是每個元素都會關聯乙個double型別的分數。redis正是通過分數來為集合中的成員進行從小到大的排序。有序集合的成員是唯一的,但分數 score 卻可以重複。集合是通過雜湊表實現的,所以新增,刪除,查詢的複雜度...