@thermopylae/core.redis
v1.0.1
Published
Redis client.
Downloads
3
Maintainers
Readme
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 [email protected]:marinrusu1997/thermopylae.git
cd thermopylae
yarn install
yarn workspace @thermopylae/core.redis run doc
Author
👤 Rusu Marin
- GitHub: @marinrusu1997
- Email: [email protected]
- LinkedIn: @marinrusu1997
📝 License
Copyright © 2021 Rusu Marin. This project is MIT licensed.