1.0.12 • Published 3 years ago

@opuscapita/redis-client v1.0.12

Weekly downloads
21
License
MIT
Repository
github
Last release
3 years ago

RedisClient / RedisEventClient

This module provides simplified and Andariel specific redis client access. It uses Consul in order to determine the required server endpoint and further configuration and applies a certain reconnect and host change behavior. In order to have a look at the full API, please visit the related wiki page.

This library provides two main classes:

Minimum setup

To install RedisClient simply type:

npm install @opuscapita/redis-client

There are two different setups you can run RedisClient with.

Setup using Consul

To go with the minimum setup using, you need to have access to a running Consul server to get your endpoint configuration for redis. In addition, redis has to be registered inside Consul. If a password authentication is required to access redis, Consul has to provide the configuration key {{your-service-name}}/redis/password where {{your-service-name}} is the least name of the directory your code runs in. If authentication is not used, you can set the consul.passwordKey to null or false when creating a new instance of EventClient.

Manual setup without Consul

As it is possible to completely run RedisClient without Consul, you will have to provide all required connection information on your own. The consulOverride object found in the DefaultConfig will tell you which settings are required for that.

Example (single get/set)

const RedisClient = require('@opuscapita/redis-client');

(async () =>
{
    // Factory method creating and initializing a new RedisClient for you.
    const client = await RedisClient.getClient();

    // Get non-existing value.
    let value = await client.get('hello'); // -> null

    // Set single value.
    await client.set('hello', 'Hello, world!'); // -> "OK"

    // Get existing value.
    value = await client.get('hello'); // -> "Hello, world!"

    // Delete key and value.
    await client.delete('hello'); // -> 1

    // If not used anymore, close the client in order to free resources.
    await client.close();
})();

Example (multi get/set)

const RedisClient = require('@opuscapita/redis-client');

(async () =>
{
    // Factory method creating and initializing a new RedisClient for you.
    const client = await RedisClient.getClient();

    // Get non-existing values.
    let value = await client.get('hello', 'world'); // -> [ null, null ]

    // Set multiple values (key, value, key, value).
    await client.set('hello', 1337, 'world', 42); // -> "OK"

    // Get existing values.
    value = await client.get('hello', 'world'); // -> [ 1337, 42 ]

    // Delete key and value.
    await client.delete('hello', 'world'); // -> 2

    // If not used anymore, close the client in order to free resources.
    await client.close();
})();

Example (transactions)

The same as shown in the above examples can be archived using pipelined transactions.

const RedisClient = require('@opuscapita/redis-client');

(async () =>
{
    // Factory method creating and initializing a new RedisClient for you.
    const client = await RedisClient.getClient();
    const transaction = client.getTransaction();

    // Get non-existing value.
    await transaction.get('hello'); // -> Pipeline

    // Set single value.
    await transaction.set('hello', 'Hello, world!'); // -> Pipeline

    // Get existing value.
    await transaction.get('hello'); // -> Pipeline

    // Delete key and value.
    await transaction.delete('hello'); // -> Pipeline

    // Transactions can be executed (exec) or discarded (discard).
    // Running exec() or discard() will invalidate the transaction object so it cannot be used a second time.
    const results = await transaction.exec() // -> [ null, "OK", "Hello, world!", 1 ]

    // If not used anymore, close the client in order to free resources.
    await client.close();
})();

Example RedisEventClient (pub/sub)

The sub class RedisEventClient uses RedisClient to provide a more reliable working with redis pub/sub. For further information please have a look at the wiki.

const { RedisEventClient } = require('@opuscapita/redis-client/lib');

(async () =>
{
    // Create a client instance for subscribing and publishing. These have two be two different instances as redis requires this.
    // You can also pass a config object to both methods.
    const subClient = RedisEventClient.getSubscriberClient();
    const pubClient = RedisEventClient.getPublisherClient();

    // Subscribe to a channel. Should later output: my-channel { hello : 'world!' }
    await subClient.subscribe('my-channel', (channel, message) => console.log(channel, message)) // -> undefined
    // Subscribe to a pattern. Should later output: my-?-channel my-pattern-channel { hello : 'world!' }
    await subClient.subscribe('my-?-channel', (pattern, channel, message) => console.log(pattern channel, message)) // -> undefined

    // Publish events.
    await pubClient.publish('my-channel', { hello : 'world!' });
    await pubClient.publish('my-pattern-channel', { hello : 'world!' });

    // Close the client(s) that you do not use anymore in order to free resources.
    await subClient.close();
    await pubClient.close();
})();

Default configuration

The default configuration object provides hints about what the lib's standard behavior is like.

{
    keyPrefix : null,
    db : 0,
    logger : new Logger(),
    retryCount : 50,
    consul : {
        host : 'consul',
        endpointName : 'redis',
        passwordKey : 'redis/password'
    },
    consulOverride : {
        host : null,
        port : 6379,
        password : null
    }
}
1.0.12

3 years ago

1.0.10

4 years ago

1.0.9

5 years ago

1.0.8

5 years ago

1.0.7

5 years ago

1.0.6

6 years ago

1.0.5

6 years ago

1.0.4

6 years ago

1.0.3

6 years ago