UNPKG

@openfinance/cache

Version:

A simple, in-memory cache for javascript projects

56 lines (42 loc) 2.06 kB
Openfinance Cache Library ========================================================================================== **NOTE: This library is now hosted on github packages at https://github.com/openfinanceio/ts-cache. For the latest updates, please use the package `@openfinanceio/ts-cache` and point npm to github package repo ([github guide](https://help.github.com/en/packages/using-github-packages-with-your-projects-ecosystem/configuring-npm-for-use-with-github-packages)).** This is a very small library that implements a simple in-memory cache. It can be segmented (i.e., you can instantiate multiple independent caches with different settings), you can set global and local TTLs, and you can set a max key count to prevent the cache from growing too large. The interface is very basic: * **To get and cache a value,** call `Cache::get` with a key, a function (optionally async) that returns the value you want to store, and an optional TTL for that key. * **To get a value directly from the cache,** call `Cache::get` without the function or TTL and expect to handle `undefined` as a return type. * **To clear a specific key from the cache,** call `Cache::clear(key)`. * **To clear all keys from the cache,** call `Cache::clear()`. ## Examples ```ts // Set up a new cache with a global TTL of 600 seconds and at most 10,000 keys const cache = new Cache({ ttlSec: 600, maxLength: 10000 }); // Get a value from an API through the cache, but give it a shorter TTL const val = await cache.get( "myRemoteVal", async () => { return await api.getResult(); }, 30 ); // Use the result if (val === 1) { console.log("Remote value is 1"); } // Get it again for something else const sameVal = cache.get("myRemoteVal"); if (typeof sameVal !== "undefined") { console.log(`Remote val was cached as ${sameVal}`); } // Oops! We know something changed that invalidated our cache. Bust it. cache.clear("myRemoteVal"); // Oh no, lots of uncertainty, what's going on?? Let's just clear the whole cache to be safe.... cache.clear(); ```