Fetching contributors…
Cannot retrieve contributors at this time
112 lines (82 sloc) 3.36 KB

This package is no longer maintained. node_redis now includes support for promises in core, so this is no longer needed.

then-redis Travis npm package

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.


Using npm:

$ npm install --save redis redis-commands then-redis

Node version >=4 is required.

Then, use as you would anything else:

// using ES6 modules
import { createClient } from 'then-redis'

// using CommonJS modules
var createClient = require('then-redis').createClient


To create a client:

import { createClient } from 'then-redis'

// Use the default config
const db = createClient()

// Or, specify custom config with a URL
const db = createClient('tcp://localhost:6379')

// Or, use an object config
const db = 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.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.