Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

dabroek/node-cache-manager-redis-store

Repository files navigation

npm version GitHub issues codecov

Redis store for node cache manager

Redis cache store for node-cache-manager.

How is this package different from node-cache-manager-redis?

This is a completely different version than the earlier node-cache-manager-redis. This package does not use redis-pool which is unnecessary and not actively maintained.

This package aims to provide the most simple wrapper possible by just passing the configuration to the underlying node_redis package.

Installation

npm install cache-manager-redis-store --save

or

yarn add cache-manager-redis-store

Usage Examples

See examples below on how to implement the Redis cache store.

Single store

var cacheManager = require('cache-manager');
var redisStore = require('cache-manager-redis-store').redisStore;
var config = {
 socket: {
 host: 'localhost', // default value
 port: 6379, // default value
 },
 password: 'XXXXX',
 db: 0,
 ttl: 600
};
var redisCache = cacheManager.caching({
 store: await redisStore(config),
});
// listen for redis connection error event
var redisClient = redisCache.store.getClient();
redisClient.on('error', (error) => {
 // handle error here
 console.log(error);
});
var ttl = 5;
await redisCache.set('foo', 'bar', { ttl: ttl });
// You can use either a Promise...
var result = await redisCache.get('foo');
console.log(result);
// ...or a callback
redisCache.get('foo', (err, result) => {
 if (err) {
 // handle error here
 }
 console.log(result);
});
// >> 'bar'
console.log(await redisCache.del('foo'));
// >> 1
function getUser(id, cb) {
 setTimeout(() => {
 console.log("Returning user from slow database.");
 cb(null, { id: id, name: 'Bob' });
 }, 100);
}
var userId = 123;
var key = `user_${userId}`;
// Note: ttl is optional in wrap()
redisCache.wrap(key, (cb) => {
 getUser(userId, cb);
}, { ttl: ttl }, (err, user) => {
 console.log(user);
 // Second time fetches user from redisCache
 redisCache
 .wrap(key, () => getUser(userId))
 .then(console.log)
 .catch(err => {
 // handle error
 });
});

Multi-store

var cacheManager = require('cache-manager');
var redisStore = require('cache-manager-redis-store').redisStore;
var redisCache = cacheManager.caching({ store: await redisStore({ ...config, db: 0, ttl: 600 }) });
var memoryCache = cacheManager.caching({ store: 'memory', max: 100, ttl: 60 });
var multiCache = cacheManager.multiCaching([memoryCache, redisCache]);
var userId2 = 456;
var key2 = `user_${userId2}`;
// Set value in all caches
await multiCache.set('foo2', 'bar2', { ttl: ttl });
// Fetches from highest priority cache that has the key
var result = await multiCache.get('foo2');
console.log(result);
// >> 'bar2'
// Delete from all caches
await multiCache.del('foo2');
// Note: ttl is optional in wrap
multiCache.wrap(key2, (cb) => {
 getUser(userId2, cb);
}, (err, user) => {
 console.log(user);
 // Second time fetches user from memoryCache, since it's highest priority.
 // If the data expires in the memory cache, the next fetch would pull it from
 // the 'someOtherCache', and set the data in memory again.
 multiCache.wrap(key2, (cb) => {
 getUser(userId2, cb);
 }, (err, user) => {
 console.log(user);
 });
});

Contribution

Want to help improve this package? We take pull requests.

License

The node-cache-manager-redis-store is licensed under the MIT license.

About

Redis store for node-cache-manager using node_redis.

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Contributors 5

AltStyle によって変換されたページ (->オリジナル) /