1
0
mirror of https://github.com/redis/node-redis.git synced 2025-08-07 13:22:56 +03:00

Adds Cuckoo Filter example. (#1843)

Co-authored-by: Leibale Eidelman <leibale1998@gmail.com>
This commit is contained in:
Simon Prickett
2022-01-19 18:32:20 +00:00
committed by GitHub
parent 86c239e7e9
commit b68836c59f
2 changed files with 97 additions and 15 deletions

View File

@@ -2,21 +2,22 @@
This folder contains example scripts showing how to use Node Redis in different scenarios. This folder contains example scripts showing how to use Node Redis in different scenarios.
| File Name | Description | | File Name | Description |
|-----------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------| |-----------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------|
| `blocking-list-pop.js` | Block until an element is pushed to a list | | `blocking-list-pop.js` | Block until an element is pushed to a list |
| `bloom-filter.js` | Space efficient set membership checks with a [Bloom Filter](https://en.wikipedia.org/wiki/Bloom_filter) using [RedisBloom](https://redisbloom.io) | | `bloom-filter.js` | Space efficient set membership checks with a [Bloom Filter](https://en.wikipedia.org/wiki/Bloom_filter) using [RedisBloom](https://redisbloom.io) |
| `command-with-modifiers.js` | Define a script that allows to run a command with several modifiers | | `command-with-modifiers.js` | Define a script that allows to run a command with several modifiers |
| `connect-as-acl-user.js` | Connect to Redis 6 using an ACL user | | `connect-as-acl-user.js` | Connect to Redis 6 using an ACL user |
| `count-min-sketch.js` | Estimate the frequency of a given event using the [RedisBloom](https://redisbloom.io) Count-Min Sketch | | `count-min-sketch.js` | Estimate the frequency of a given event using the [RedisBloom](https://redisbloom.io) Count-Min Sketch |
| `lua-multi-incr.js` | Define a custom lua script that allows you to perform INCRBY on multiple keys | | `cuckoo-filter.js` | Space efficient set membership checks with a [Cuckoo Filter](https://en.wikipedia.org/wiki/Cuckoo_filter) using [RedisBloom](https://redisbloom.io) |
| `managing-json.js` | Store, retrieve and manipulate JSON data atomically with [RedisJSON](https://redisjson.io/) | | `lua-multi-incr.js` | Define a custom lua script that allows you to perform INCRBY on multiple keys |
| `search-hashes.js` | Uses [RediSearch](https://redisearch.io) to index and search data in hashes | | `managing-json.js` | Store, retrieve and manipulate JSON data atomically with [RedisJSON](https://redisjson.io/) |
| `search-json.js` | Uses [RediSearch](https://redisearch.io/) and [RedisJSON](https://redisjson.io/) to index and search JSON data | | `search-hashes.js` | Uses [RediSearch](https://redisearch.io) to index and search data in hashes |
| `set-scan.js` | An example script that shows how to use the SSCAN iterator functionality | | `search-json.js` | Uses [RediSearch](https://redisearch.io/) and [RedisJSON](https://redisjson.io/) to index and search JSON data |
| `stream-producer.js` | Adds entries to a [Redis Stream](https://redis.io/topics/streams-intro) using the `XADD` command | | `set-scan.js` | An example script that shows how to use the SSCAN iterator functionality |
| `stream-consumer.js` | Reads entries from a [Redis Stream](https://redis.io/topics/streams-intro) using the blocking `XREAD` command | | `stream-producer.js` | Adds entries to a [Redis Stream](https://redis.io/topics/streams-intro) using the `XADD` command |
| `topk.js` | Use the [RedisBloom](https://redisbloom.io) TopK to track the most frequently seen items. | | `stream-consumer.js` | Reads entries from a [Redis Stream](https://redis.io/topics/streams-intro) using the blocking `XREAD` command |
| `topk.js` | Use the [RedisBloom](https://redisbloom.io) TopK to track the most frequently seen items. |
## Contributing ## Contributing

81
examples/cuckoo-filter.js Normal file
View File

@@ -0,0 +1,81 @@
// This example demonstrates the use of the Cuckoo Filter
// in the RedisBloom module (https://redisbloom.io/)
import { createClient } from 'redis';
async function cuckooFilter() {
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://oss.redis.com/redisbloom/Cuckoo_Commands/#cfreserve
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://oss.redis.com/redisbloom/Cuckoo_Commands/#cfadd
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://oss.redis.com/redisbloom/Cuckoo_Commands/#cfaddnx
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.
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:
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();
}
cuckooFilter();