1
0
mirror of https://github.com/redis/node-redis.git synced 2025-08-04 15:02:09 +03:00
Files
node-redis/examples/topk.js
2022-04-25 05:58:24 -04:00

113 lines
3.1 KiB
JavaScript

// This example demonstrates the use of the Top K
// in the RedisBloom module (https://redisbloom.io/)
import { createClient } from 'redis';
async function topK() {
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://oss.redis.com/redisbloom/TopK_Commands/#topkreserve
try {
await client.topK.reserve('mytopk', 10);
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
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
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)
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:
const [ steve, suze, leibale, frederick ] = await client.topK.query('mytopk', [
'steve',
'suze',
'leibale',
'frederick'
]);
console.log(`steve ${steve === 1 ? 'is': 'is not'} in the top 10.`);
console.log(`suze ${suze === 1 ? 'is': 'is not'} in the top 10.`);
console.log(`leibale ${leibale === 1 ? 'is': 'is not'} in the top 10.`);
console.log(`frederick ${frederick === 1 ? 'is': 'is not'} in the top 10.`);
// Get count estimate for some team members:
const [ simonCount, lanceCount ] = await client.topK.count('mytopk', [
'simon',
'lance'
]);
console.log(`Count estimate for simon: ${simonCount}.`);
console.log(`Count estimate for lance: ${lanceCount}.`);
await client.quit();
}
topK();