Redis之sorted sets型別及操作

2021-07-30 23:55:29 字數 2235 閱讀 9609

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 卻可以重複。集合是通過雜湊表實現的,所以新增,刪除,查詢的複雜度...