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
npm install redis-extension --save
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');
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
})();
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
});
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.
Made with 💚
Published under MIT License.