A simple and intuitive in-memory cache with TTL support for your JavaScript applications.
Discover an elegant and efficient in-memory cache module for Node.js. This package incorporates time-to-live (ttl) functionality, asynchronously evicting expired keys from the cache.
-
Support for up to 1 million keys that are stored in a single object.
-
Leverages worker_threads, to optimize cache expiration checks, freeing the main thread for other critical tasks.
- You can install nodecache.js via npm:
npm install nodecache.js
To start using nodecache.js with your applications, import and create an instane as follows:
const NodeCache = require("nodecache.js")
let myCache = new NodeCache()
- Values in the cache are stored as
string
type by default. To prevent forced string types:-
let myCache = new NodeCache({ forceString: false // this will disable default type coercion. })
-
- By default, there is no limit set on the keys for the cache. To limit the max number of keys for your cache instance:
-
let myCache = new NodeCache({ maxKeys: 5000 // Default is -1 to disable the limit. })
-
- Set a default TTL value for all set() calls with standard ttl configuration value.
-
let myCache = new NodeCache({ stdTTL: 5 * 60 * 1000 // every key saved for ttl: 5mins })
-
- Cache instance by default only logs errors. To Configure params for cache logs:
- Cache log params:
mode
,type
andpath
-
let myCache = new NodeCache({ mode: "std" // std debug mode for std output stream. Defaults to none. })
- Allowed
mode
values include:none
,std
,exp
-
Console output:
let myCache = new NodeCache({ type: "dev env logs" // sets a custom debugger msg type. Defaults to info. })
[π Custom Err] 6/2/23, 4:51 PM: nodeCache.js initialized
- To configure cache log output stream to a specific file path:
wip
-
let myCache = new NodeCache({ path: "file://mycache.log" // sets log output stream, default is set to none. })
- Cache log params:
- Accepts a valid key of type:
number
orstring
. - If not found or the key has expired: Returns
undefined
. - If found: returns the
value
of type:number
,string
, orobject
. -
let value = myCache.get("key")
- Accepts an Array of valid keys.
Array<key>
- Returns an Array of
objects
corresponding to each key.Array<{value, ttl?}>
-
let values = myCache.getM(["key1", "key2", ...]) for(let value of values) { //access all the value objects. {value, ttl} }
- Accepts valid key, value and optional ttl.
- Allowed value types:
number
,string
, orobject
. - Allowed ttl type:
number
in milliseconds. - Returns a
boolean
. True is set was success, else false. -
let isSet = myCache.set("key", "value", 1200) // key->value set for 1.2s
- Accepts an Array of valid set() inputs.
Array<{key, value, ttl?}>
- Returns an Array of boolean flags indicating set status.
Array<boolean>
-
let isSetResponses = myCache.setM([{"k1", "v1", 2500}, {"k2", 15}...])
- Accepts a valid key:
number
orstring
. - Returns
undefined
to key is missing, else the ttl value:number
. -
let ttl = myCache.getTTL("key1")
- Accepts a valid key and ttl in ms:
number
. - Returns
boolean
response. true if set was a success else false. -
let success = myCache.setTTL("key1", 12000) // key1 for a ttl: 12sec
- Accepts void. Returns a Promise.
- Refresh runs on the main thread, looping over all the keys in the cache, and evicting the expired once.
- This is a blocking code. Recommendated when consistency in the cache is a high priority.
-
const importantTask = async () => { try { await cache.refresh(); // code ... } catch(err) { ... } }
- Accepts
void
and returnsvoid
. - It is mandatory to invoke close() method when cache is no longer needed.
-
let myCache = new NodeCache({...options}) /** * work with cache instance.. */ myCache.close(); // close worker thread, & free up memory.
- Returns an object with cacheHit, cacheMiss and keyCount.
-
let stats = myCache.global() // stats: { cacheHit, cacheMiss, keyCount }
- Returns void. To clear the current global stats for the cache instance.
-
myCache.flush() let stats = myCache.global() //stats: { 0, 0, 0}
- Node.js Events: on(
event_type
): Support for initialize, close, get, set, delete, flush, and refresh. - Optimizations on existing ttl implementation and the cache eviction policy.
If you're interested to contribute or brain storm ideas, Contributions are most welcomed!
Reach out to: akash.c1500@gmail.com
Copyright (c) Akash Chouhan. All rights reserved. Released under the MIT License.