zadd
1. 基本語法
zadd(key
,[NX|XX]
,[CH], [INCR]
,score
,member
[, score, member,...]
)
key
,[NX|XX]
,[CH], [INCR]
,score
,member
[, score, member,...]
) 新增成員到有序集合,每個成員必須對應一個分數score
,成員順序為score
由小到大排列。在不給定CH參數時,zadd預設回傳新增的成員member
數量。
Parameter
Meaning
NX
只添加新成員,不允許更改現有成員。
若member
不存在,才新增分數score
與成員member
XX
只更新現有成員,不允許新增成員。
若member
存在,才更新該成員分數score
CH
zadd預設回傳「新增成員」的數量,改變現有成員分數不影響回傳值;
若標註CH參數,則zadd回傳「新增成員」及「分數改變」的成員總數量。
INCR
功能與zincrby相同,標註INCR參數下,只能使用一組score
與member
。
2. 範例
(1) 新增有序集合,為每個成員指定分數
client.zadd('order:set', 2, 'A');
client.zadd('order:set', 1, 'B');
client.zadd('order:set', -1, 'C');
client.zadd('order:set', -2, 'D');
client.zrange('order:set', 0, -1, redis.print);
成員
分數
A
2
B
1
C
-1
D
-2
Reply: D,C,B,A
(2) NX:只新增成員,不允許更改現有成員
client.del('order:set');
client.zadd('order:set', 2, 'A');
client.zadd('order:set', 1, 'B');
client.zadd('order:set', -1, 'C');
client.zadd('order:set', -2, 'D');
client.zadd('order:set', "NX", 3, 'D', 4, 'E', redis.print);
client.zrange('order:set', 0, -1, redis.print);
成員
分數
E
4
A
2
B
1
C
-1
D
-2
Reply: 1
Reply: D,C,B,A,E
(3) XX:只修改現有成員分數,不允許新增成員
client.del('order:set');
client.zadd('order:set', 2, 'A');
client.zadd('order:set', 1, 'B');
client.zadd('order:set', -1, 'C');
client.zadd('order:set', -2, 'D');
client.zadd('order:set', "XX", 3, 'D', 4, 'E', redis.print);
client.zrange('order:set', 0, -1, redis.print);
成員
分數
D
3
A
2
B
1
C
-1
Reply: 0
Reply: C,B,A,D
(4) CH : 回傳新增及更改分數的成員總數
client.del('order:set');
client.zadd('order:set', 2, 'A');
client.zadd('order:set', 1, 'B');
client.zadd('order:set', -1, 'C');
client.zadd('order:set', -2, 'D');
client.zadd('order:set', "CH", 3, 'D', 4, 'E', redis.print);
client.zrange('order:set', 0, -1, redis.print);
成員
分數
E
4
D
3
A
2
B
1
C
-1
Reply: 2
Reply: C,B,A,D,E
(5) INCR:成員存在則加分,不存在則新增
client.del('order:set');
client.zadd('order:set', 2, 'A');
client.zadd('order:set', 1, 'B');
client.zadd('order:set', -1, 'C');
client.zadd('order:set', -2, 'D');
client.zadd('order:set', "INCR", 10, 'D', redis.print);
client.zadd('order:set', "INCR", 10, 'E', redis.print);
成員
分數
E
10
D
-2 + 10 = 8
A
2
B
1
C
-1
Reply: 8
Last updated
Was this helpful?