Last active
July 24, 2017 17:44
-
-
Save TheDeveloper/d64e58e678ea4727be23d9c4a10926cd to your computer and use it in GitHub Desktop.
Node module for Redis hmsetex command
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* npm install --save lodash redis node-redis-scripty | |
* | |
* Usage: | |
* let hmsetex = require('./hmsetex.js') | |
* let key = 'your-key'; | |
* let fields = { some_field: 'test', another_field: 'foo' }; | |
* hmsetex(key, fields).then(handleResult).catch(handleError); | |
*/ | |
const _ = require('lodash'); | |
let Scripty = require('node-redis-scripty'); | |
let redis = require('redis'); | |
let yourRedisClient = redis.createClient(); | |
let scripty = new Scripty(yourRedisClient); | |
const hmsetexsrc = ` | |
local key = KEYS[1] | |
local args = ARGV | |
local call = redis.call | |
if call("EXISTS", key) == 0 then | |
return nil | |
end | |
return call("HMSET", key, unpack(args)) | |
`; | |
module.exports = function(key, fields) { | |
return new Promise((resolve, reject) => { | |
scripty.loadScript('hmsetex', hmsetexsrc, (err, script) => { | |
if (err) return reject(err); | |
// Make sure any null values are set to '' for redis | |
Object.keys(fields).forEach(k => { | |
if (fields[k] === null) fields[k] = ''; | |
}); | |
let args = _.flatten(_.toPairs(fields)); | |
let numKeys = 1; | |
script.run(numKeys, key, ...args, (err, result) => err ? reject(err) : resolve(result)); | |
}); | |
}); | |
}; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment