https://github.com/aliencreations/alien-node-redis-utils
Helper functions for Redis on NodeJS
https://github.com/aliencreations/alien-node-redis-utils
Last synced: about 2 months ago
JSON representation
Helper functions for Redis on NodeJS
- Host: GitHub
- URL: https://github.com/aliencreations/alien-node-redis-utils
- Owner: AlienCreations
- License: mit
- Created: 2015-07-22T23:52:57.000Z (over 10 years ago)
- Default Branch: master
- Last Pushed: 2023-09-13T21:21:34.000Z (over 2 years ago)
- Last Synced: 2025-10-10T17:15:13.692Z (5 months ago)
- Language: JavaScript
- Size: 36.1 KB
- Stars: 0
- Watchers: 1
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# alien-node-redis-utils
Helper functions for Redis cache on NodeJS. The functions are pure and curried with Ramda.
[](https://travis-ci.org/AlienCreations/alien-node-redis-utils) [](https://coveralls.io/github/AlienCreations/alien-node-redis-utils?branch=master) [](https://npmjs.org/package/alien-node-redis-utils) [](https://david-dm.org/AlienCreations/alien-node-redis-utils)
## 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`
```js
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.
```js
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`
```js
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`
```js
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.
```js
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.
```js
// 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));
});
```