feather-cache
v1.3.1
Published
A Simple Lightweight Pluggable Key-Value Cache For Multiple Storage Options.
Downloads
4,049
Maintainers
Readme
feather-cache
A Simple Pluggable Key-Value Cache For Multiple Storage Options.
Install
npm i --save feather-cache
You don't have to install type definitions for typescript. It's built in.
What
This is a simple caching frame which can be used with available drivers or you can easily write one your own. If no drivers are provided (default) works like an in-memory cache. But that is not what this module intended for. The in-memory cache is provided for the sake of convenience. If that is what all you want, lru-cache is recommended.
Actual use case for this module is to use with a driver (mongodb-driver or indexed-db-driver etc.) which enables persistent caching.
Example
in memory cache
const { FeatherCache } = require('feather-cache');
// or
import { FeatherCache } from 'feather-cache';
// init
const fStore = new FeatherCache({
maxAgeInMs: 60 * 1000, // 1 min expiry
});
// ...async fn...
await fStore.set('hiya', 'mm!');
await fStore.get('hiya'); //-> mm!
await fStore.fetch('hiya'); //-> { key: 'hiya', val: 'mm!' }
// ... after expiry time
await fStore.get('hiya'); //-> null
with a driver
// ...
const fStore = new FeatherCache(driver);
// ...
APIs
| function | description |
| --------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| FeatherCache.set(key, val, opt)
| returns Promise
.key
: stringval
: any data to be stored opt
: (optional) { maxAgeInMs: 1000 }
, sets expiry time. |
| FeatherCache.get(key)
| returns Promise
which resolves to the stored data. else, null
. If data has expired returns null
and then deletes the entry behind the scenes. |
| FeatherCache.fetch(key)
| returns Promise
which resolves to stored data. The difference between get
and fetch
is that, fetch
returns the stored data one more time after its expiry and then deletes it.More info:get
: finds data -> if expired deletes it -> returns null
.fetch
: finds data -> if expired returns it -> and then deletes it
. However, you can control this behavior by passing the delete
option (default delete: true
). Eg: fStore.fetch('hiya', { delete: false })
. This sets the expiry flag but don't delete it. Sometimes you may find this helpful. |
| FeatherCache.del(key)
| returns Promise
deletes the entry |
Configuration / writing drivers
A driver is nothing but a configuration object which exposes a persistent storage interface.
const dbDriver = {
maxAgeInMs: 60 * 1000 * 5, // default expiry 5 mins
setFn: async function(key, val) {
// db interface to store data
await Db.create({ key, val });
},
getFn: async function(key) {
// db interface to get data
const data = await Db.find({ where: { key } });
return data;
},
delFn: async function(key) {
// db interface to delete data
await Db.remove({ where: { key } });
},
};
// pass in the driver
const featherStore = new FeatherCache(dbDriver);
// ...
An example: feather-cache-indexeddb.
Those who publish drivers advised to follow the naming convention:
feather-cache-<storage_option_name>
Also, attach the key word feather-cache
.
Licence
MIT © Vajahath Ahmed