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