redis-extension
TypeScript icon, indicating that this package has built-in type declarations

1.5.0 • Public • Published

Redis Extension 🍬

npm version main codecov semantic-release: angular

This is a library to

  • manage singleton client & cluster instances
  • cache entity identifiers in groups for a given time with scheduler to trigger callback(s) on expiration.
  • track entity identifiers in groups by creation date.

Table of Contents

Installation

npm install redis-extension --save

Usage

Config

To create a configuration for the driver Client or Cluster, a configuration must be specified, like described in the following:

Client

import {
    setConfig
} from "redis-extension";

setConfig({
    connectionString: 'redis://127.0.0.1',
    options: {
        reconnectOnError(error: Error): boolean {
            return true;
        }
    }
}, 'alias');

A configuration is always identified by a string, in this example: alias (default: default), so multiple configurations can be registered.

In the upper example, the options property is used to pass information to the underneath driver (IORedis) and the connectionString (optional) property is a way to specify the Redis server to which the driver should connect to.

Cluster

import {
    setConfig
} from "redis-extension";

setConfig({
    clusterNodes: [
        'redis://127.0.0.1'
    ],
    clusterOptions: {
        // ...
    }
}, 'alias');

Singleton

A singleton instance associated for a given configuration key, can be acquired like described in the following:

Client

import {
    useClient
} from "redis-extension";

const client = useClient('alias');

(async () => {
    await client.set('key', 'value');
    const payload = await client.get('key');
    console.log(payload);
    // value
})();

Cluster

import {
    useCluster
} from "redis-extension";

const cluster = useCluster('alias');

(async () => {
    await cluster.set('key', 'value');
    const payload = await cluster.get('key');
    console.log(payload);
    // value
})();

Cache

The cache submodule requires a Redis instance, which can either be created with this library or with the underneath ioredis driver itself.

import {
    Cache,
    useClient
} from "redis-extension";

(async () => {
    type User = {
        id: number,
        name: string,
        realm_id: string
    };

    const cache = new Cache<number, User>(
        {
            redis: useClient()
        },
        {
            prefix: 'user',
            context: {
                realm_id: 'master'
            }
        }
    );

    // Register events
    cache.on('expired', (data) => {
        console.log(data);
        // { id: 'foo', prefix: 'user', context: {realm_id: 'master'}

        // Important: The value will not be part of the expired event payload!
    });

    // Start scheduler to watch cached entries and trigger specific events.
    await cache.start();

    await cache.set('foo', 'bar');
    const payload = cache.get('foo');
    console.log(payload);
    // bar
});

Tracker

import {
    Tracker,
    useClient
} from "redis-extension";

(async () => {
    const tracker = new Tracker<number>(
        {
            redis: useClient()
        },
        {
            prefix: 'users-online'
        }
    );

    // add user with id: 1 to the stack (time: 1642423766)
    tracker.add(1);

    // add user with id: 2 to the stack (time: 1642423866)
    tracker.add(2);

    const items = tracker.getMeta({
        sort: 'DESC'
    });

    console.log(items);
    // {
    //      data: [
    //          {id: 1, score: 1642423766},
    //          {id: 2, score: 1642423866}
    //      ],
    //      meta: {}
    // }
})();

The score property represents the unix timestamp, when the entry was added.

License

Made with 💚

Published under MIT License.

Package Sidebar

Install

npm i redis-extension

Weekly Downloads

285

Version

1.5.0

License

MIT

Unpacked Size

164 kB

Total Files

67

Last publish

Collaborators

  • tada5hi