TypeScript icon, indicating that this package has built-in type declarations

1.0.6 • Public • Published

Node SuperCache


npm install node-supercache

Quick start

  1. Setup individual Redis connections for Publishing, Subscribing and general activity.
import { Cached } from 'node-supercache';
import Client from "ioredis";
import Redlock from "redlock";

const redisPath = '';
const redisPort = 6379;

const redisCommonOptions: any = {
    host: redisPath,
    port: redisPort,
    keepAlive: 1,

export const redisMain = new Client({
    enableAutoPipelining: true,

const redisSubscriber = new Client({
  autoResubscribe: true,
  enableAutoPipelining: true,

const redisPublisher = new Client({
  enableAutoPipelining: true,
  1. Initialize Redlock instance with desired settings and set of Redis nodes(3 for optimal performance) with a retry count as 0.
const redlock = new Redlock([redisMain], {
  driftFactor: 0.01,
  retryCount: 0,
  retryDelay: 100,
  retryJitter: 200,
  automaticExtensionThreshold: 200,
  1. Initialise node-supercache Cache instance with the above Redis connections and Redlock instance.
export const Cache = new Cached({
  redisMain: redisMain,
  redisPublisher: redisPublisher,
  redisSubscriber: redisSubscriber,
  redlock: redlock,
  debug: false,
  1. Setup Express HTTP server with a simple API endpoint which return a Date string.
const express = require("express");
import objectHash from 'object-hash';
var app = express()

const endpointHandler = async function(req: any, res: any){
  console.log('Produce data from Handler(not in cache)')
  await new Promise(resolve => setTimeout(resolve, 2000))
  return {
      data: new Date()

const unCachedHandele = async (req: any, res: any, next: any) => {
    const data = await endpointHandler(req,res)
    return res.status(200).send(data)
  1. Setup 2 endpoints one without the caching mod and the other with caching.

Note: Currently the endpoint handler returned by the Caching mod needs an extra handle to resolve the request after processing.

app.get('/api/v1/un-cached', unCachedHandele)

      ttl: 100,
      prefix: '/api/v1/cached',
      callback: endpointHandler,
      cacheKeyHandle: async(req,res) => {
          return objectHash({
              url: req.originalUrl,
              body: req.body
    // Second handle to resolve the request, as the primary handler always calls next()
    async function(req: any, res: any){

app.listen(8080, () => {
  console.log('listening on 8080...')
  1. Execute curl -X GET http://localhost:8080/api/v1/un-cached to get the un-cached api response all the time and use
  2. Execute curl -X GET http://localhost:8080/api/v1/cached to get cached api response after first try.



Package Sidebar


npm i node-supercache

Weekly Downloads






Unpacked Size

33.3 kB

Total Files


Last publish


  • baxtech
  • kartis