Generates CRC hashes for strings - for use by node redis clients to determine key slots.
Clone or download
Latest commit bb8a717 May 25, 2018
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
benchmark added old tag extraction from ioredis May 31, 2016
lib fix #3 Apr 25, 2018
test fix #3 Apr 25, 2018
.editorconfig initial commit May 30, 2016
.eslintrc misc linting issues Sep 15, 2016
.gitignore initial commit May 30, 2016
.npmignore updated .npmignore May 24, 2018
.travis.yml remove 0.10 & 0.12 from travis May 24, 2018
LICENSE update license May 24, 2018
README.md misc May 24, 2018
package.json 1.0.12 May 24, 2018

README.md

Coverage Status Downloads npm version dependencies License Follow on Twitter

Redis Key Slot Calculator

A high performance redis cluster key slot calculator for node redis clients e.g. node_redis, ioredis and redis-clustr.

This also handles key tags such as somekey{actualTag}.

Install

Install with NPM:

npm install cluster-key-slot --save

Usage

const calculateSlot = require('cluster-key-slot');
const calculateMultipleSlots = require('cluster-key-slot').generateMulti;

// ...

// a single slot number
const slot = calculateSlot('test:key:{butOnlyThis}redis');

// multiple keys - multi returns a single key slot number, returns -1 if any
// of the keys does not match the base slot number (base is defaulted to first keys slot)
// This is useful to quickly determine a singe slot for multi keys operations.
const slotForRedisMulti = calculateMultipleSlots([
  'test:key:{butOnlyThis}redis',
  'something:key45:{butOnlyThis}hello',
  'example:key46:{butOnlyThis}foobar',
]);

Benchmarks

OLD in these benchmarks refers to the ioredis crc calc and many of the other calculators that use Buffer.

NEW tags x 472,156 ops/sec ±1.80% (90 runs sampled)
OLD tags x 413,725 ops/sec ±1.37% (93 runs sampled)
NEW without tags x 1,287,795 ops/sec ±2.06% (89 runs sampled)
OLD without tags x 633,340 ops/sec ±0.87% (93 runs sampled)
NEW without tags singular x 4,824,560 ops/sec ±1.71% (93 runs sampled)
OLD without tags singular x 2,981,057 ops/sec ±0.22% (96 runs sampled)