diff --git a/examples/README.md b/examples/README.md index 089096d719b..e4022a597ca 100644 --- a/examples/README.md +++ b/examples/README.md @@ -13,6 +13,8 @@ This folder contains example scripts showing how to use Node Redis in different | `get-server-time.js` | Get the time from the Redis server | | `lua-multi-incr.js` | Define a custom lua script that allows you to perform INCRBY on multiple keys | | `managing-json.js` | Store, retrieve and manipulate JSON data atomically with [RedisJSON](https://redisjson.io/) | +| `pubsub-publisher.js` | Adds multiple messages on 2 different channels messages to Redis | +| `pubsub-subscriber.js` | Reads messages from channels using `PSUBSCRIBE` command | | `search-hashes.js` | Uses [RediSearch](https://redisearch.io) to index and search data in hashes | | `search-json.js` | Uses [RediSearch](https://redisearch.io/) and [RedisJSON](https://redisjson.io/) to index and search JSON data | | `set-scan.js` | An example script that shows how to use the SSCAN iterator functionality | diff --git a/examples/pubsub-publisher.js b/examples/pubsub-publisher.js new file mode 100644 index 00000000000..354e0ae2f0a --- /dev/null +++ b/examples/pubsub-publisher.js @@ -0,0 +1,20 @@ +// A sample publisher using the publish function to put message on different channels. +// https://redis.io/commands/publish/ +import { createClient } from 'redis'; + +const client = createClient(); + +await client.connect(); + +// Declare constant variables for the name of the clients we will publish to as they will be required for logging. +const channel1 = 'chan1nel'; +const channel2 = 'chan2nel'; + +for (let i = 0; i < 10000; i++) { + // 1st channel created to publish 10000 messages. + await client.publish(channel1, `channel1_message_${i}`); + console.log(`publishing message on ${channel1}`); + // 2nd channel created to publish 10000 messages. + await client.publish(channel2, `channel2_message_${i}`); + console.log(`publishing message on ${channel2}`); +} diff --git a/examples/pubsub-subscriber.js b/examples/pubsub-subscriber.js new file mode 100644 index 00000000000..ff4c05f083e --- /dev/null +++ b/examples/pubsub-subscriber.js @@ -0,0 +1,41 @@ +// A sample subscriber showing how the subscribe method and pSubscribe method work. +// https://redis.io/commands/subscribe/ +// https://redis.io/commands/pSubscribe/ +// This consumes messages published by pubsub-publisher.js + +import { createClient} from 'redis'; + +// Create and connect client before executing any Redis commands. +const client = createClient(); +await client.connect(); + +// Each subscriber needs to connect individually therefore we duplicate the client. +const channel1Sub = client.duplicate(); +const channel2Sub = client.duplicate(); +const noChannelsSub = client.duplicate(); +const allChannelsSub = client.duplicate(); + +await channel1Sub.connect(); +await channel2Sub.connect(); +await noChannelsSub.connect(); +await allChannelsSub.connect(); + +// This subscriber only will receive messages from channel 1 as they are using the subscribe method and subscribed to chan1nel. +await channel1Sub.subscribe('chan1nel', (message) => { + console.log(`Channel1 subscriber collected message: ${message}`); +},true); + +// This subscriber only will receive messages from channel 2 as they are using the subscribe method and subscribed to chan2nel. +await channel2Sub.subscribe('chan2nel', (message) => { + console.log(`Channel2 subscriber collected message: ${message}`); +},true); + +// This subscriber will not receive any messages as its channel does not exist. +await noChannelsSub.subscribe('chan*nel', (message) => { + console.log(`This message will never be seen as we are not using pSubscribe here. ${message}`); +},true); + +// This subscriber receive messages from both channel 1 and channel 2 using the pSubscribe method. +await allChannelsSub.pSubscribe('chan*nel', (message, channel) => { + console.log(`Channel ${channel} sent message: ${message}`); +},true); \ No newline at end of file