?
? ????? PHP ??? ???? ??? ?? ??
SORT key [BY pattern] [LIMIT offset count] [GET pattern [GET pattern ...]] [ASC|DESC] [ALPHA] [STORE destination]
自1.0.0起可用。
時間復(fù)雜度: O(N + M * log(M))其中N是列表中要排序的元素的數(shù)量,M是返回元素的數(shù)量。當(dāng)元素未被排序時,復(fù)雜度當(dāng)前為O(N),因為在下一個版本中將會避免復(fù)制步驟。
返回或存儲包含元素的列表,設(shè)置或排序集合的key
。默認(rèn)情況下,排序是數(shù)字,元素通過將其值解釋為雙精度浮點數(shù)進(jìn)行比較。這是最簡單的SORT形式:
SORT mylist
假設(shè)mylist
是數(shù)字列表,該命令將返回相同的列表,其中的元素從小到大排序。為了將數(shù)字從大到小排序,請使用DESC
修飾符:
SORT mylist DESC
當(dāng)mylist
包含字符串值并且您想按字典順序?qū)λ鼈冞M(jìn)行排序時,請使用ALPHA
修飾符:
SORT mylist ALPHA
Redis支持UTF-8,假設(shè)您正確設(shè)置了!LC_COLLATE
環(huán)境變量。
使用LIMIT
修飾符可以限制返回元素的數(shù)量。該修飾符接受offset
參數(shù),指定要跳過的元素數(shù)和count
參數(shù),指定從開始處返回的元素數(shù)offset
。以下示例將返回10個排序版本的mylist
元素,從元素0開始(offset
從零開始):
SORT mylist LIMIT 0 10
幾乎所有的修飾符都可以一起使用。以下示例將返回前5個元素,按字典順序降序排列:
SORT mylist LIMIT 0 5 ALPHA DESC
有時候你想使用外部鍵作為權(quán)重進(jìn)行排序,而不是比較列表,設(shè)置或排序集中的實際元素。比方說,清單mylist
中包含的元素1
,2
并3
表示存儲在對象的唯一ID object_1
,object_2
和object_3
。當(dāng)這些對象都有關(guān)聯(lián)的存儲的權(quán)重weight_1
,weight_2
并且weight_3
,排序可以指示使用這些權(quán)重排序mylist
用以下語句:
SORT mylist BY weight_*
該BY
選項采用weight_*
用于生成用于排序的鍵的模式(在本例中相同)。獲得這些鍵名稱代的第一次出現(xiàn)*
在列表中的元件的實際值(1
,2
并且3
在這個例子中)。
該BY
選項也可以采用不存在的鍵,這會導(dǎo)致 SORT 跳過排序操作。如果您想檢索外部密鑰(請參閱GET
下面的選項),而沒有排序開銷,這很有用。
SORT mylist BY nosort
我們前面的例子只返回排序后的 ID。在某些情況下,以獲得實際的對象,而不是它們的 ID(更多有用的object_1
,object_2
和object_3
)。根據(jù)列表中的元素檢索外鍵,可以使用以下命令完成 set 或 sorted set:
SORT mylist BY weight_* GET object_*
該GET
選項可以多次使用,以便為原始列表,集合或排序集合的每個元素獲取更多的鍵。
GET
元素本身也可以使用特殊模式#
:
SORT mylist BY weight_* GET object_* GET #
默認(rèn)情況下,SORT 將排序后的元素返回給客戶端。使用該STORE
選項,結(jié)果將作為列表存儲在指定的密鑰中,而不是返回給客戶端。
SORT mylist BY weight_* STORE resultkey
使用一個有趣的模式SORT ... STORE
在于將 EXPIRE 超時與結(jié)果鍵相關(guān)聯(lián),以便在可以緩存 SORT 操作結(jié)果一段時間的應(yīng)用程序中使用。其他客戶端將使用緩存列表,而不是為每個請求調(diào)用
SORT。當(dāng)密鑰超時時,可以通過SORT ... STORE
再次調(diào)用來創(chuàng)建緩存的更新版本。
請注意,要正確實現(xiàn)此模式,避免多個客戶端同時重建緩存很重要。這里需要某種鎖定(例如使用 SETNX)。
BY
and GET
使用以下語法可以使用BY
和GET
選擇哈希字段:
SORT mylist BY weight_*->fieldname GET object_*->fieldname
該字符串->
用于將密鑰名稱與散列字段名稱分開。如上文所述,密鑰被替換,并且存儲在結(jié)果密鑰中的散列被訪問以檢索指定的散列字段。
數(shù)組回復(fù):在不傳遞store
選項的情況下,該命令返回一個有序元素列表。整數(shù)回復(fù):當(dāng)store
指定該選項時,該命令返回目標(biāo)列表中排序元素的數(shù)量。