Giter Site home page Giter Site logo

alien-node-redis-utils's Introduction

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

alien-node-redis-utils's People

Contributors

seancannon avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.