Helper functions for Redis cache on NodeJS. The functions are pure and curried with Ramda.
$ npm install alien-node-redis-utils --save
Run the specs
$ npm test
Get an item from the Redis store, provided a recognized cacheKey
var redis = require('redis'),
redisClient = redis.createClient(),
cacheUtils = require('alien-node-redis-utils')(redisClient);
cacheUtils.getItem('someKey')
.then(function(item) {
// cool
})
.catch(function(err) {
// no item found matching cacheKey
});
Set an item in the Redis store. Adds if key does not exist, otherwise updates the cache.
var redis = require('redis'),
redisClient = redis.createClient(),
cacheUtils = require('alien-node-redis-utils')(redisClient);
var TWO_HOURS_IN_SECONDS_CACHE_EXPIRE = 1000 * 60 * 60 * 2;
var cacheKey = 'someKey',
data = { foo : 'bar' };
cacheUtils.setItem(cacheKey, TWO_HOURS_IN_SECONDS_CACHE_EXPIRE, data);
.then(function(data) {
// cool
});
Delete an item from the Redis store, provided a recognized cacheKey
var redis = require('redis'),
redisClient = redis.createClient(),
cacheUtils = require('alien-node-redis-utils')(redisClient);
cacheUtils.deleteItem('someKey')
.then(function() {
// cool
})
.catch(function(err) {
// some err from redisClient
});
Checks for an existing record matching cacheKey
and appends/prepends item
var User = require('/path/to/user/model'),
data = {name : 'joe'};
var redis = require('redis'),
redisClient = redis.createClient(),
cacheUtils = require('alien-node-redis-utils')(redisClient);
var CACHE_KEY = 'api.users',
CACHE_EXPIRE = 1000 * 60 * 60 * 24;
return User.create(data).then(function(user) {
return cacheUtils.maybeAddToQueryCache(CACHE_KEY, CACHE_EXPIRE, user);
});
Checks for an existing record matching cacheKey
, looks for an item matching a
provided identifierProperty
, removes the item and resets the cache.
var User = require('/path/to/user/model'),
data = {id : 123};
var redis = require('redis'),
redisClient = redis.createClient(),
cacheUtils = require('alien-node-redis-utils')(redisClient);
var CACHE_KEY = 'api.users';
return User.delete(data)
.thenResolve(data)
.then(cacheUtils.pluckFromQueryCache(CACHE_KEY, 'id');
Checks for an existing record matching cacheKey
, and sets it to items
if items
is a populated list. If items
is falsy or an empty array, cacheKey
will be deleted.
// See internal usage from pluckFromQueryCache method:
var pluckFromQueryCache = R.curry(function(redisClient, cacheKey, identifierProperty, item) {
return getItem(redisClient, cacheKey)
.then(JSON.parse)
.then(R.defaultTo([]))
.then(listUtils.filterOutObject(identifierProperty, R.prop(identifierProperty, item)))
.then(setOrDeleteCacheBucket(redisClient, cacheKey))
.thenResolve(item)
.catch(R.always(item));
});