zadd

1. 基本語法

zadd(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參數下,只能使用一組scoremember

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?