lazy-cache-object

Object with properties that are evaluated when needed and destroyed after some time.


Keywords
cache, lazy, object
License
MIT
Install
npm install lazy-cache-object@1.1.0

Documentation

Lazy Cache Object

  • It's an object with lazy initialization feature and conditional cache invalidation mechanism.
  • It uses Promises for async stuff so you can use it with async/await easily.
  • Also this package provides TypeScript's .d.ts declaration files if you wish to use it with TS.

API

Constructor

const lazyCacheObject = new LazyCacheObject({
    initKey(key) {
        // do some ASYNC work and return a Promise
        // this function will be called every time there will be request for the key
        // and cache will be empty
        return asyncPromiseReturn()
    },
    shouldInvalidate(key, value) {
        // this is optional
        // you can decide if you want the cache to be invalidated after TTL
        // you should return a boolean or a promise for a boolean
        // this function will be called every time LazyCacheObject will try
        // to invalidate the key.
        return true;
    },
    onShouldInvalidateError(err) {
        // this one is optional as well
        // it's called anytime shouldInvalidate throws an error
        console.error('an error ocured', err);
    }
});

Basic usage

// to get a key from the cache just call `get` it will return a promise for the value
lazyCacheObject.get('some-key').then(value => {
    // here you have your value.
});

Cache invalidation timer

You have to manually strt/stop invalidation timer:

lazyCacheObject.startCacheInvalidationTimer(60000);
// takes one argument: timeToLiveInMilliseconds
// the above method will make LazyCacheObject invalidate old keys every minute
// it will not invalidate a key if `shouldInvalidate()` method has returned false for that key
// it will run a function to check if any of the keys are to be dropped every timeToLiveInMilliseconds / 4 milliseconds
// so your item can live in the cache for a maximum of 5/4 * timeToLiveInMilliseconds milliseconds

REMEMBER to stop the invalidation timer manually:

lazyCacheObject.stopCacheInvalidationTimer();
// from now on, no invalidation will happen - internal `setInterval` method is cleared.

License: MIT

See the LICENSE file