zrangebylex

1. 基本語法

zrangebylex(key, min:<string>, max:<string>, ['LIMIT', offset, count],callback)

有序集合中若成員分數相同,可強制依字典序(lexicographic ordering)「由小到大」排列成員,並透過minmaxLIMIT參數進一步篩選字典序範圍,並回傳區間成員(不含分數)。

特殊字串

適用參數

功能

-

min

對應值為負無限小的字符串

+

max

對應值為正無限大的字符串

(

minmax

區間邊界,不包含邊界成員(開集合)

[

minmax

區間邊界,包含邊界成員(閉集合)

2. 範例

(1) 創建一組分數相同的有序集合

client.del('zset:1');

const key1 = 'zset:1'
const members1 = ['c', 'a', 'C', 'A', 'B', 'b'];
const scores1 = [0, 0, 0, 0, 0, 0];

members1.forEach((mem, ind) => {
    client.zadd(key1, scores1[ind], mem);
}
client.zrange(key1, 0, -1, 'WITHSCORES', (err, obj) =>{
    console.log(key1, ':', obj);
});
zset:1 : ['A', '0', 'B', '0', 'C', '0', 'a', '0', 'b', '0', 'c', '0']

(2) 可利用特殊符號「 + 」、「 - 」返回字典排序後的所有集合成員

client.zrangebylex(key1, '-', '+', (err, obj) =>{
    console.log('Output:', obj);
});
Output: [ 'A', 'B', 'C', 'a', 'b', 'c' ]

(3) 利用特殊符號「 ( 」、「 [ 」擷取集合區間

client.zrangebylex(key1, '(A', '[b', (err, obj) => {
    console.log('Output:', obj);
});
Output: [ 'B', 'C', 'a', 'b' ]

(4) 透過LIMIT參數擷取區間成員

client.zrangebylex(key1, '(A', '[b', 'LIMIT', 1, 2, (err, obj) =>{
    console.log('Output:', obj);
});

成員

A

B

C

a

b

c

(A, b]

x

o

o

o

o

x

offset=1

x

0

1

2

3

x

count=2

x

-

o

o

-

x

Output: [ 'C', 'a' ]

Last updated

Was this helpful?