天天看點

ZADD key [NX|XX] [CH] [INCR] score member [score member ...]

将所有指定成員添加到鍵為<code>key</code>有序集合(sorted set)裡面。 添加時可以指定多個分數/成員(score/member)對。 如果指定添加的成員已經是有序集合裡面的成員,則會更新改成員的分數(scrore)并更新到正确的排序位置。

如果<code>key</code>不存在,将會建立一個新的有序集合(sorted set)并将分數/成員(score/member)對添加到有序集合,就像原來存在一個空的有序集合一樣。如果<code>key</code>存在,但是類型不是有序集合,将會傳回一個錯誤應答。

分數值是一個雙精度的浮點型數字字元串。<code>+inf</code>和<code>-inf</code>都是有效值。

ZADD 指令在<code>key</code>後面分數/成員(score/member)對前面支援一些參數,他們是:

XX: 僅僅更新存在的成員,不添加新成員。

NX: 不更新存在的成員。隻添加新成員。

CH: 修改傳回值為發生變化的成員總數,原始是傳回新添加成員的總數 (CH 是 changed 的意思)。更改的元素是新添加的成員,已經存在的成員更新分數。 是以在指令中指定的成員有相同的分數将不被計算在内。注:在通常情況下,<code>ZADD</code>傳回值隻計算新添加成員的數量。

INCR: 當<code>ZADD</code>指定這個選項時,成員的操作就等同ZINCRBY指令,對成員的分數進行遞增操作。

Redis 有序集合的分數使用雙精度64位浮點數。我們支援所有的架構,這表示為一個IEEE 754 floating point number,它能包括的整數範圍是<code>-(2^53)</code> 到 <code>+(2^53)</code>。或者說是-9007199254740992 到 9007199254740992。更大的整數在内部用指數形式表示,是以,如果為分數設定一個非常大的整數,你得到的是一個近似的十進制數。

有序集合按照分數以遞增的方式進行排序。相同的成員(member)隻存在一次,有序集合不允許存在重複的成員。 分數可以通過<code>ZADD</code>指令進行更新或者也可以通過<code>ZINCRBY</code>指令遞增來修改之前的值,相應的他們的排序位置也會随着分數變化而改變。

擷取一個成員目前的分數可以使用ZSCORE指令,也可以用它來驗證成員是否存在。

更多關于有序集合的資訊請參考資料類型-有序集合。

有序集合裡面的成員是不能重複的都是唯一的,但是,不同成員間有可能有相同的分數。當多個成員有相同的分數時,他們将是有序的字典(ordered lexicographically)(仍由分數作為第一排序條件,然後,相同分數的成員按照字典規則相對排序)。

字典順序排序用的是二進制,它比較的是字元串的位元組數組。

如果使用者将所有元素設定相同分數(例如0),有序集合裡面的所有元素将按照字典順序進行排序,範圍查詢元素可以使用ZRANGEBYLEX指令(注:範圍查詢分數可以使用ZRANGEBYSCORE指令)。

Integer reply, 包括:

添加到有序集合的成員數量,不包括已經存在更新分數的成員。

如果指定<code>INCR</code>參數, 傳回将會變成bulk-string-reply :

成員的新分數(雙精度的浮點型數字)字元串。

<code>&gt;= 2.4</code>: 接受多個成員。 在Redis 2.4以前,指令隻能添加或者更新一個成員。

##例子

本文作者:陳群

本文來自雲栖社群合作夥伴rediscn,了解相關資訊可以關注redis.cn網站。

繼續閱讀