Home

Awesome

LRU-Memoize (@digitalbazaar/lru-memoize)

Node.js CI NPM Version

A Memoized wrapper around the JavaScript lru-cache library.

Table of Contents

Background

lru-memoize is used to to memoize promises (as opposed to just the results of the operations), which helps in high-concurrency use cases. (And in turn, it uses lru-cache under the hood.)

Install

To install locally (for development):

git clone https://github.com/digitalbazaar/lru-memoize.git
cd lru-memoize
npm install

Usage

To import:

import { LruCache } from '@digitalbazaar/lru-memoize';
// or
const { LruCache } = require('@digitalbazaar/lru-memoize');

The memoized LruCache constructor passes any options given to it through to the lru-cache constructor, so see that repo for the full list of cache management options. Commonly used ones include:

This library is useful for caching (in a deterministic memoized fashion) expensive or long-running functions, such as API requests, database lookups, and so on.

For example, say you have a function fetchStatus() that retrieves a result from a web API (here, simulated with a delay() wait). To cache the result of this function:

import { LruCache } from '@digitalbazaar/lru-memoize';

// Cache expiration/TTL: 5 seconds
const myCache = new LruCache({ maxAge: 5000 });

async function fetchStatus() {
  // simulate an async task
  await delay(100);
  executedTestFn = true;
  return {success: true, timestamp: Date.now()};
}

// Load the cached result if it's present, otherwise, perform the operation
const result = await myCache.memoize({
  key: 'myApiResults',
  fn: fetchStatus
});

// You can also memoize a particular call to a function, using anonymous arrow functions:
const url = 'https://api.example';
const result = await myCache.memoize({
  key: 'myResults',
  fn: async () => fetchMyResultsFromWeb({ url })
});

The key param is used to namespace the caches, in case the same LruCache instance is being used to cache different types of operations/functions.

Contribute

PRs accepted.

If editing the Readme, please conform to the standard-readme specification.

License