You've already forked node-redis
mirror of
https://github.com/redis/node-redis.git
synced 2025-07-31 05:44:24 +03:00
114 lines
3.1 KiB
JavaScript
114 lines
3.1 KiB
JavaScript
// This example demonstrates the use of the Top K
|
|
// in the RedisBloom module (https://redis.io/docs/stack/bloom/)
|
|
|
|
import { createClient } from 'redis';
|
|
|
|
const client = createClient();
|
|
|
|
await client.connect();
|
|
|
|
// Delete any pre-existing Top K.
|
|
await client.del('mytopk');
|
|
|
|
// Reserve a Top K to track the 10 most common items.
|
|
// https://redis.io/commands/topk.reserve/
|
|
try {
|
|
await client.topK.reserve('mytopk', 10, { width: 400, depth: 10, decay: 0.9 });
|
|
console.log('Reserved Top K.');
|
|
} catch (e) {
|
|
if (e.message.endsWith('key already exists')) {
|
|
console.log('Top K already reserved.');
|
|
} else {
|
|
console.log('Error, maybe RedisBloom is not installed?:');
|
|
console.log(e);
|
|
}
|
|
}
|
|
|
|
const teamMembers = [
|
|
'leibale',
|
|
'simon',
|
|
'guy',
|
|
'suze',
|
|
'brian',
|
|
'steve',
|
|
'kyleb',
|
|
'kyleo',
|
|
'josefin',
|
|
'alex',
|
|
'nava',
|
|
'lance',
|
|
'rachel',
|
|
'kaitlyn'
|
|
];
|
|
|
|
// Add random counts for random team members with TOPK.INCRBY
|
|
// https://redis.io/commands/topk.incrby/
|
|
for (let n = 0; n < 1000; n++) {
|
|
const teamMember = teamMembers[Math.floor(Math.random() * teamMembers.length)];
|
|
const points = Math.floor(Math.random() * 1000) + 1;
|
|
await client.topK.incrBy('mytopk', {
|
|
item: teamMember,
|
|
incrementBy: points
|
|
});
|
|
console.log(`Added ${points} points for ${teamMember}.`);
|
|
}
|
|
|
|
// List out the top 10 with TOPK.LIST
|
|
// https://redis.io/commands/topk.list/
|
|
const top10 = await client.topK.list('mytopk');
|
|
console.log('The top 10:');
|
|
// top10 looks like this:
|
|
// [
|
|
// 'guy', 'nava',
|
|
// 'kaitlyn', 'brian',
|
|
// 'simon', 'suze',
|
|
// 'lance', 'alex',
|
|
// 'steve', 'kyleo'
|
|
// ]
|
|
console.log(top10);
|
|
|
|
// List out the top 10 with their counts (requires RedisBloom >=2.2.9)
|
|
// https://redis.io/commands/topk.list/
|
|
const top10WithCounts = await client.topK.listWithCount('mytopk');
|
|
console.log('The top 10 with counts:');
|
|
console.log(top10WithCounts);
|
|
// top10WithCounts looks like this:
|
|
// [
|
|
// { item: 'suze', count: 42363 },
|
|
// { item: 'lance', count: 41982 },
|
|
// { item: 'simon', count: 41831 },
|
|
// { item: 'steve', count: 39237 },
|
|
// { item: 'guy', count: 39078 },
|
|
// { item: 'kyleb', count: 37338 },
|
|
// { item: 'leibale', count: 34230 },
|
|
// { item: 'kyleo', count: 33812 },
|
|
// { item: 'alex', count: 33679 },
|
|
// { item: 'nava', count: 32663 }
|
|
// ]
|
|
|
|
// Check if a few team members are in the top 10 with TOPK.QUERY:
|
|
// https://redis.io/commands/topk.query/
|
|
const [ steve, suze, leibale, frederick ] = await client.topK.query('mytopk', [
|
|
'steve',
|
|
'suze',
|
|
'leibale',
|
|
'frederick'
|
|
]);
|
|
|
|
console.log(`steve ${steve ? 'is': 'is not'} in the top 10.`);
|
|
console.log(`suze ${suze ? 'is': 'is not'} in the top 10.`);
|
|
console.log(`leibale ${leibale ? 'is': 'is not'} in the top 10.`);
|
|
console.log(`frederick ${frederick ? 'is': 'is not'} in the top 10.`);
|
|
|
|
// Get count estimate for some team members with TOPK.COUNT:
|
|
// https://redis.io/commands/topk.count/
|
|
const [ simonCount, lanceCount ] = await client.topK.count('mytopk', [
|
|
'simon',
|
|
'lance'
|
|
]);
|
|
|
|
console.log(`Count estimate for simon: ${simonCount}.`);
|
|
console.log(`Count estimate for lance: ${lanceCount}.`);
|
|
|
|
client.close();
|