handy-redis
A wrapper around node_redis with Promise and TypeScript support.
Why
node_redis doesn't support Promises out-of-the-box - you have to use bluebird's promisifyAll
, which has the side effect of removing all TypeScript/intellisense support from the package.
This package is a wrapper around node_redis and exclusively uses Promises It publishes TypeScript types generated from the official redis documentation and examples, so it's much easier to know what parameters a command expects.
Usage
npm install --save handy-redis
ES6/TypeScript:
import { createHandyClient } from 'handy-redis';
(async function() {
const client = createHandyClient();
await client.set('foo', 'bar');
const foo = await client.get('foo');
console.log(foo);
})();
Vanilla JS:
const handyRedis = require('handy-redis');
const client = handyRedis.createHandyClient();
client
.set('foo', 'bar')
.then(() => client.get('foo'))
.then(foo => console.log(foo));
The package is published with TypeScript types, with the redis documentation and response type attached to each command:
Examples
See the snapshot tests for tons of usage examples (look at the .md
files).
Multi
Most members of node_redis's multi
type don't need to be promisified, because they execute synchronously. Only exec
is async. To use a promisified version of that, use execMulti
:
import { createHandyClient } from 'handy-redis';
(async function() {
const client = createHandyClient();
const multi = client.multi().set("z:foo", "987").keys("z:*").get("z:foo");
const result = await client.execMulti(multi);
console.log(result);
})();
execMulti
is generic, so in TypeScript you can use something like const strings = await client.execMulti<string>(multi)
if you know all results will be strings. Otherwise the type will default to {}
.
Development
Most of the package is generated by running sample commands from the redis documentation repo.
git clone https://github.com/mmkal/handy-redis --recursive
cd handy-redis
npm install
npm test
npm test
triggers npm run build
before running the tests - and the build
script generates the client before using TypeScript to compile it. If you want to run the tests without rebuilding, use npx ava
.
If you cloned without --recursive
you'll need to run git submodule update --init
to get the redis-doc repo locally.
Testing
If a snapshot test fails, it's possible it just needs to be updated. Make sure your git status is clean and run npm test -- -u
.