?
This document uses PHP Chinese website manual Release
ZRANGEBYLEX key min max [LIMIT offset count]
自2.8.9起可用。
時間復(fù)雜度: O( log(N)+ M),其中 N 是有序集合中元素的數(shù)量,M 是返回元素的數(shù)量。如果 M 是常量(例如,總是要求使用 LIMIT 的前10個元素),則可以將其視為 O( log(N))。
當(dāng)排序集中的所有元素都以相同的分?jǐn)?shù)插入時,為了強制執(zhí)行詞典排序,此命令將返回排序集中的所有元素,其key
值介于min
和之間max
。
如果排序集中的元素具有不同的分?jǐn)?shù),則返回的元素是未指定的。
使用memcmp()
C 函數(shù)逐字節(jié)地比較元素被認(rèn)為是從低到高的字符串排序。如果公共部分相同,則較長的字符串被認(rèn)為大于較短的字符串。
可選LIMIT
參數(shù)可用于僅獲取匹配元素的范圍(與 SELECT LIMIT 偏移量類似,SQL 中的計數(shù)類似)。請記住,如果offset
很大,則需要offset
在獲取要返回的元素之前遍歷元素的排序集,這可能會增加 O(N)時間復(fù)雜度。
有效的開始和停止必須以(
或開始[
,以便指定范圍項目是分別獨占的還是包含的。的特殊值+
或-
用于啟動和停止具有特殊意義或正無窮和負(fù)無窮大的字符串,所以例如命令 ZRANGEBYLEX myzset - + 保證返回的所有元素的有序集合,如果所有的元素都以同樣的比分。
字符串被比較為二進(jìn)制字節(jié)數(shù)組。由于指定了 ASCII 字符集,這意味著通常這也會以明顯的字典方式比較正常的 ASCII 字符。但是,如果使用非純 ASCII 字符串(例如 utf8 字符串),則不是這樣。
但是,用戶可以對編碼字符串應(yīng)用轉(zhuǎn)換,以便插入到有序集合中的元素的第一部分將按照用戶對特定應(yīng)用程序的需求進(jìn)行比較。例如,如果我想添加將以不區(qū)分大小寫的方式進(jìn)行比較的字符串,但我仍然想在查詢時檢索實際案例,則可以按以下方式添加字符串:
ZADD autocomplete 0 foo:Foo 0 bar:BAR 0 zap:zap
由于每個元素中的第一個標(biāo)準(zhǔn)化部分(在冒號字符之前),我們強制進(jìn)行給定的比較,但是在使用 ZRANGEBYLEX 進(jìn)行查詢之后,應(yīng)用程序可以向用戶顯示冒號后面的字符串的第二部分。
比較的二進(jìn)制特性允許使用排序集作為通用索引,例如元素的第一部分可以是64位大端數(shù):由于大端數(shù)在初始位置中具有最高有效字節(jié),二進(jìn)制比較將匹配數(shù)字的數(shù)字比較。這可以用來實現(xiàn)64位值的范圍查詢。如下例所示,在前8個字節(jié)后,我們可以存儲我們實際索引的元素的值。
陣列回復(fù):指定分?jǐn)?shù)范圍內(nèi)的元素列表。
redis> ZADD myzset 0 a 0 b 0 c 0 d 0 e 0 f 0 g (integer) 7
redis> ZRANGEBYLEX myzset - [c 1) "a" 2) "b" 3) "c"
redis> ZRANGEBYLEX myzset - (c 1) "a" 2) "b"
redis> ZRANGEBYLEX myzset [aaa (g 1) "b" 2) "c" 3) "d" 4) "e" 5) "f"