Options
All
  • Public
  • Public/Protected
  • All
Menu

@thermopylae/core.redis

@thermopylae/core.redis

Version Node Version Documentation License: MIT

Redis client.

Install

npm install @thermopylae/core.redis

Description

This package contains client for Redis Server.
It can maintain up to 3 types of connections to Redis Server. Each connection represents an instance of node-redis client.
Redis Modules are also supported. For now, only Redis JSON is implemented.

Usage

Package exports a singleton of RedisClient class, called RedisClientInstance, which needs to be configured before being used. After that you can access connections that were established and work with them.
Let's take a look at the following example which demonstrates how the package can be used.

import { 
    RedisClientInstance, 
    ConnectionType,
    RedisConnectionOptions,
    RedisModule,
    initLogger as initCoreRedisLogger 
} from '@thermopylae/core.redis';
import { LoggerManagerInstance, OutputFormat } from '@thermopylae/core.logger';

(async function main() {
    /* Firstly init logging system */
    LoggerManagerInstance.formatting.setDefaultFormattingOrder(OutputFormat.PRINTF);
    LoggerManagerInstance.console.createTransport({ level: 'info' });
    initCoreRedisLogger();
    
    /* Connect to Redis Server */
    const connectionOptions = {
        host: '127.0.0.1',
        port: 3306,
        password: 'your-password',
        connect_timeout: 10_000,
        max_attempts: 10,
        retry_max_delay: 5_000,
        attachDebugListeners: new Set<DebuggableEventType>(['end', 'reconnecting'])
    } as RedisConnectionOptions;
    
    await RedisClientInstance.connect(
        {
            [ConnectionType.REGULAR]: connectionOptions,
            [ConnectionType.SUBSCRIBER]: connectionOptions
        },
        {
            // add commands for redis json module on connections
            modules: new Set([RedisModule.JSON])
        }
    );
    
    /* Set up Keyspace Notification Events */
    await RedisClientInstance.client.config('SET', 'notify-keyspace-events', 'Kgxe');
    await RedisClientInstance.subscriber.subscribe(`__keyspace@${RedisClientInstance.db}__:KEY`);
    RedisClientInstance.on(ConnectionType.SUBSCRIBER, 'message', (channel, message) => {
        console.log(`Received new message on channel '${channel}': ${message}`);
    });
    
    /* Issue commands (see node-redis documentation for multiple details) */
    await RedisClientInstance.client.set('KEY', 'VALUE', ['EX', 2], 'NX'); // will be logged
    await RedisClientInstance.subscriber.unsubscribe(`__keyspace@${RedisClientInstance.db}__:KEY`);
    await RedisClientInstance.client.del('KEY'); // won't be logged
    
    await RedisClientInstance.client.json_del('JSON_KEY'); // RedisJSON module commands are available too
    
    /* Disconnect */
    await RedisClientInstance.disconnect();
})();

API Reference

API documentation is available here.

It can also be generated by issuing the following commands:

git clone git@github.com:marinrusu1997/thermopylae.git
cd thermopylae
yarn install
yarn workspace @thermopylae/core.redis run doc

Author

👤 Rusu Marin

📝 License

Copyright © 2021 Rusu Marin.
This project is MIT licensed.