crock-then-redis forked from then-redis is a fast, promise-based Redis client for node.js. It's build on top of node_redis, so it's safe and stable.
Reason for forking this and making this a new npm package is then-redis seemed to be inactive and maintainer was not active
To create a client:
var redis = require('crock-then-redis');
var db = redis.createClient();
var db = redis.createClient('tcp://localhost:6379');
var db = redis.createClient({
host: 'localhost',
port: 6379,
password: 'password'
});
Once you have a client, you're ready to issue some commands. All Redis commands are present on the Client
prototype and may be called with variable length argument lists*. Every command returns a promise for its result. Pipelining happens automatically in most normal usage.
// Simple set, incrby, and get
db.set('my-key', 1);
db.incrby('my-key', 5);
db.get('my-key').then(function (value) {
assert.strictEqual(value, 6);
});
// Multi-key set/get
db.mset({ a: 'one', b: 'two' });
db.mget('a', 'b').then(function (values) {
assert.deepEqual(values, [ 'one', 'two' ]);
});
// Sets
db.sadd('my-set', 1, 2, 3);
db.sismember('my-set', 2).then(function (value) {
assert.strictEqual(value, 1);
});
// Hashes
var originalHash = { a: 'one', b: 'two' };
db.hmset('my-hash', originalHash);
db.hgetall('my-hash').then(function (hash) {
assert.deepEqual(hash, originalHash);
});
// Transactions
db.multi();
db.incr('first-key');
db.incr('second-key');
db.exec().then(function (reply) {
assert.deepEqual(reply, [ 1, 1 ]);
});
// Pubsub
var subscriber = redis.createClient();
subscriber.on('message', function (channel, message) {
console.log('Received message: ' + message);
});
subscriber.subscribe('my-channel').then(function () {
db.publish('my-channel', 'a message');
});
If you don't like the variable-length argument lists, or you already have an array of arguments that you need to pass to a command, you can always call client.send()
directly. It takes two arguments: 1) the name of the Redis command and 2) an array of command arguments.
db.send('get', [ 'my-key' ]);
db.send('incrby', [ 'my-key', 5 ]);
db.send('mset', [ 'a', 'one', 'b', 'two' ]);
* INFO
, MGET
, MSET
, MSETNX
, HMSET
, HGETALL
, LPUSH
, and RPUSH
optionally accept/return JavaScript objects for convenience in dealing with Redis' multi-key and hash APIs
For best results, it is recommended that you use Redis 2.6 or above.
Using npm:
$ npm install then-redis
Please file issues on the issue tracker on GitHub.
To run the tests in node, first start a redis server on the default port and host and then:
$ npm install
$ npm test