Helper functions for Redis on NodeJS
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
lib
spec
.gitignore
.jshintrc
.travis.yml
LICENSE
README.md
package.json
yarn.lock

README.md

alien-node-redis-utils

Helper functions for Redis cache on NodeJS. The functions are pure and curried with Ramda.

Build Status Coverage Status npm version Dependency Status

Install

$ npm install alien-node-redis-utils --save

Run the specs

$ npm test

Methods

getItem

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
  });

setItem

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
  });

deleteItem

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
  });

Helpers

maybeAddToQueryCache

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);
});

pluckFromQueryCache

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');

setOrDeleteCacheBucket

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));
});