zinterstore
1. 基本語法
zinterstore(destination
, numkeys
, key[, key, ...]
, ["WEIGHTS", weight[, weight, ...]
, ["AGGREGATE", SUM|MIN|MAX]
)
destination
, numkeys
, key[, key, ...]
, ["WEIGHTS", weight[, weight, ...]
, ["AGGREGATE", SUM|MIN|MAX]
) 計算numkeys
個有序集合的成員交集,並將交集成員新增至destination
有序集合,交集成員的新分數預設為既有分數之加總SUM
,可另設置每個key
的加權分數weight
,或另更改新分數計算方式SUM|MIN|MAX
。
2. 範例
(1) 先創建兩個有序集合
client.del('zset:1', 'zset:2');
const key1 = 'zset:1'
const members1 = ['A', 'B', 'C', 'D'];
const scores1 = [1, 3, 5, 7, 9];
const key2 = 'zset:2'
const members2 = ['C', 'D', 'E', 'F', 'G'];
const scores2 = [0, 2, 4, 6, 8, 10];
members1.forEach((mem, ind) => {
client.zadd(key1, scores1[ind], mem);
})
client.zrange(key1, 0, -1, 'WITHSCORES', (err, obj) =>{
console.log(key1, ':', obj);
});
members2.forEach((mem, ind) => {
client.zadd(key2, scores2[ind], mem);
})
client.zrange(key2, 0, -1, 'WITHSCORES', (err, obj) =>{
console.log(key2, ':', obj);
});
zset:1 : ['A', '1', 'B','3', 'C', '5','D', '7']
zset:2 : ['C', '0', 'D', '2', 'E', '4', 'F', '6', 'G', '8']
(2) 計算兩個有序集合的交集
client.zinterstore('zset:inter', 2, key1, key2);
client.zrange('zset:inter', 0, -1, 'WITHSCORES', (err, obj) =>{
console.log('Intersection : ', obj);
});
member
key1
key2
SUM
C
5
0
5
D
7
2
9
Intersection : [ 'C', '5', 'D', '9' ]
(3) 交集成員分數以「加權分數」計算
client.zinterstore('zset:inter', 2, key1, key2, 'WEIGHTS', 1, 10);
client.zrange('zset:inter', 0, -1, 'WITHSCORES', (err, obj) =>{
console.log('Intersection : ', obj);
});
member
key1 * weight1
key2 * weight2
Weighted SUM
C
5 * 1 = 5
0 * 10 = 0
5
D
7 * 1 = 7
2 * 10 = 20
27
Intersection : [ 'C', '5', 'D', '27' ]
(4) 交集成員分數以「最大值」計算
client.zinterstore('zset:inter', 2, key1, key2, 'AGGREGATE','MAX');
client.zrange('zset:inter', 0, -1, 'WITHSCORES', (err, obj) =>{
console.log('Intersection : ', obj);
});
member
key1
key2
MAX
C
5
0
5
D
7
2
7
Intersection : [ 'C', '5', 'D', '7' ]
Last updated
Was this helpful?