-
Notifications
You must be signed in to change notification settings - Fork 1.9k
/
Copy pathcuckoo-filter.js
79 lines (66 loc) · 2.19 KB
/
cuckoo-filter.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
// This example demonstrates the use of the Cuckoo Filter
// in the RedisBloom module (https://redis.io/docs/stack/bloom/)
import { createClient } from 'redis';
const client = createClient();
await client.connect();
// Delete any pre-existing Cuckoo Filter.
await client.del('mycuckoo');
// Reserve a Cuckoo Filter with a capacity of 10000 items.
// https://redis.io/commands/cf.reserve/
try {
await client.cf.reserve('mycuckoo', 10000);
console.log('Reserved Cuckoo Filter.');
} catch (e) {
console.log('Error, maybe RedisBloom is not installed?:');
console.log(e);
}
// Add items to Cuckoo Filter individually with CF.ADD command.
// https://redis.io/commands/cf.add/
await Promise.all([
client.cf.add('mycuckoo', 'leibale'),
client.cf.add('mycuckoo', 'simon'),
client.cf.add('mycuckoo', 'guy'),
client.cf.add('mycuckoo', 'suze'),
client.cf.add('mycuckoo', 'brian'),
client.cf.add('mycuckoo', 'steve'),
client.cf.add('mycuckoo', 'kyle'),
client.cf.add('mycuckoo', 'josefin'),
client.cf.add('mycuckoo', 'alex'),
client.cf.add('mycuckoo', 'nava'),
]);
// Add items to the Cuckoo Filter only if they don't exist in it...
// https://redis.io/commands/cf.addnx/
const nxReply = await Promise.all([
client.cf.addNX('mycuckoo', 'kaitlyn'), // New
client.cf.addNX('mycuckoo', 'rachel'), // New
client.cf.addNX('mycuckoo', 'brian') // Previously added
]);
console.log('Added members to Cuckoo Filter.');
console.log('nxReply:');
// nxReply looks like this:
// [
// true,
// true,
// false
// ]
console.log(nxReply);
// Check whether a member exists with the CF.EXISTS command.
// https://redis.io/commands/cf.exists/
const simonExists = await client.bf.exists('mycuckoo', 'simon');
console.log(`simon ${simonExists ? 'may' : 'does not'} exist in the Cuckoo Filter.`);
// Get stats for the Cuckoo Filter with the CF.INFO command:
// https://redis.io/commands/cf.info/
const info = await client.cf.info('mycuckoo');
// info looks like this:
// {
// size: 16440,
// numberOfBuckets: 8192,
// numberOfFilters: 1,
// numberOfInsertedItems: 12,
// numberOfDeletedItems: 0,
// bucketSize: 2,
// expansionRate: 1,
// maxIteration: 20
// }
console.log(info);
await client.quit();