Redis client.
npm install @thermopylae/core.redis
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.
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 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
👤 Rusu Marin
Copyright © 2021 Rusu Marin.
This project is MIT licensed.