cache-all
🚀 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 = const cache = // default is in-memory engine// orconst cache = // explicit in-memory engine// orconst cache = // file engine// orconst cache = // redis engineconst app = // if you need to use cache methods immediately after init method, you must await it `await cache.init({...})`cache// ... app
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 // 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 = cache
Set cache with specific expire time (second):
const cache = cache // {status: 1}
get(key)
Get cache (if key doesn't exist, null will be return):
const cache = cache // 'bar'
getAll()
Get all cached entries as array:
const cache = cache // [ { 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 = cache // true
remove(key)
Remove given cache key:
const cache = cache // {status: 1}
removeByPattern(pattern)
Remove all cached data base on pattern/text:
const cache = await cacheawait cache await cache // 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 = const router = expressconst cache = router// 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 = const memoryCache = // ...fileCachememoryCache// ... app
- set/get/has/remove/middleware
const fileCache = const memoryCache = fileCache // {status: 1} memoryCache // {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