npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

cache-all

v2.1.1

Published

Fast, efficient cache engines for both express routes cache & native node (redis, in-memory & file cache)

Downloads

86

Readme

npm version Dependency Status Build Status Coverage Status Codacy Badge

NPM info

cache-all

:rocket: Fast, efficient cache engines for expressJS & native nodeJS (redis, in-memory & file caching), singleton pattern make your application run smoothly like a boss.

  • Multi cache engines, each engine has one singleton instance and independent with other engine.
  • Include express middleware, which can be use for cache response on specific routes.
  • Init once and then use anywhere for caching anything in your application.
  • ES6 Promise.

Install

npm install --save cache-all

or

yarn add cache-all

Usages (single cache engine):

Init

Init cache engine once and then you can use it anywhere, recommend init when booting your application

Example init in your server.js:

const express = require('express')
const cache = require('cache-all') // default is in-memory engine
// or
const cache = require('cache-all/memory') // explicit in-memory engine
// or
const cache = require('cache-all/file') // file engine
// or
const cache = require('cache-all/redis') // redis engine
const app = express()

// if you need to use cache methods immediately after init method, you must await it `await cache.init({...})`
cache.init({
  ttl: 90,
})
// ...

app.listen(...)

Default config: Just config for engine that will be use

  • in-memory
{
  ttl: 90,
  isEnable: true, // Flag for enable/disable cache, useful for development
}
  • file
{
  ttl: 90,
  isEnable: true,
  file: {
    path: path.join(process.cwd(), 'storage', 'cache') // Storage path for file cache engine
  }
}
  • redis
{
  ttl: 90,
  isEnable: true,
  redis: {
    port: 6379,
    host: '127.0.0.1',
    // password: String,
    // database: Number,
    // prefix: String, // default is `cacheall:`
    // setex: Function
  }
}

set(key, value, [expireIn])

Set cache:

const cache = require('cache-all')

cache
  .set('foo', 'bar')
  .then(result => console.log(result))

Set cache with specific expire time (second):

const cache = require('cache-all')

cache
  .set('foo', 'bar', 90)
  .then(result => console.log(result)) // {status: 1}

get(key)

Get cache (if key doesn't exist, null will be return):

const cache = require('cache-all')

cache
  .get('foo')
  .then(result => console.log(result)) // 'bar'

getAll()

Get all cached entries as array:

const cache = require('cache-all')

cache
  .getAll()
  .then(result => console.log(result)) // [ { key: 'foo', value: 'bar'},... ]

has(key)

Deprecated: should use cache.get and then check returned value instead use this function because costs of these functions is same.

Check if given key exist:

const cache = require('cache-all')

cache
  .has('foo')
  .then(result => console.log(result)) // true

remove(key)

Remove given cache key:

const cache = require('cache-all')

cache
  .remove('foo')
  .then(result => console.log(result)) // {status: 1}

removeByPattern(pattern)

Remove all cached data base on pattern/text:

const cache = require('cache-all')

await cache.set('user_foo', { name: 'foo' })
await cache.set('user_bar', { name: 'bar' })

await cache.removeByPattern('user') // or removeByPattern(/user/)

middleware([expireIn], [prefix]) (Cache on express route)

This package provide a middleware which will cache your response data base on request fullpath, request method and prefix (optinal).

NOTE: using prefix if you want manual clear data that was cached by middleware (using removeByPattern(prefix) method)

const express = require('express')
const router = express.Router()
const cache = require('cache-all')

router.get('/api/user', cache.middleware(86400, 'user'), function(req, res, next) {
  res.json({foo: 'bar'})
})
// First time request '/foo' will cache response data before send back to client (non-blocking)
// Next time requests '/foo' will be response cached data immediately

Usages (multi engine)

You can use many cache engine together in your application, each engine still has singleton instance of it, that work independent with other

Just require specific engine you need instead require root

  • init
const fileCache = require('cache-all/file')
const memoryCache = require('cache-all/memory')

// ...
fileCache.init({
  ttl: 60,
  file: {
    path: path.join(process.cwd(), 'storage', 'cache')
  }
})
memoryCache.init({
  ttl: 60,
})
// ...

app.listen(...)
  • set/get/has/remove/middleware
const fileCache = require('cache-all/file')
const memoryCache = require('cache-all/memory')

fileCache
  .set('foo', 'bar', 90)
  .then(result => console.log(result)) // {status: 1}
  
memoryCache
  .set('foo', 'bar', 90)
  .then(result => console.log(result)) // {status: 1}

Typescript

Add @types/express and @type/redis as devDependencies:

yarn add -D @types/express @types/redis

That's it!

Test

npm run test

TODO

  • Mongo cache engines
  • Reduce number of dependencies
  • Update Code coverage
  • Event

Contributes

You are welcome <3

Release Note

|Version|Date|Description| |:--:|:--:|:--| |1.0.0|2019-01-14|First version, contain basic functions| |1.1.0|2019-08-19|Add removeByPattern function & update dependencies| |2.0.0|2019-09-05|Re-structure (DRY) & remove mkdirp dependency | |2.0.1|2019-09-08|Refactor FileStore - use ES6 class instead prototype| |2.0.2|2019-09-21|Add getAll method & integrate travis-ci & code coverage| |2.0.6|2019-10-24|Allow redis empty prefix PR#15| |2.0.8|2019-10-28|FS async implementation PR#19| |2.1.0|2019-10-28|Add type definition (typescript) PR#22| |2.1.1|2020-08-05|Upgrade node-redis to v3 (Removed hiredis completely)|

License

This project is licensed under the terms of the MIT license