New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

memory-cacheable

Package Overview
Dependencies
Maintainers
1
Versions
5
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

memory-cacheable

minimal in memory completely volatile cache store with a "stale concept"

  • 1.2.2
  • latest
  • Source
  • npm
  • Socket score

Version published
Maintainers
1
Created
Source

cacheable

I built this because I had the need to store expensive and frequently called functions into memory. It's not a framework for caches, it's not really a class, or a cache wrapper. It's minimal, and encourages you to decide how you want to interact with the available states of your cached collections. Think of this as a function that keeps state of points in time, with a couple helpers to manage cached collections.

install

npm install --save memory-cacheable

api

cacheable({ key, cache, ttl, offset, verbose })

see below table for options:

keyrequiredsummary
keyfalsekey for debugging purposes, mostly
ttlfalsedefaults to 1 hour, uses the ms module for easy formatting
cachefalsedefaults to an array, but will also support cleaning out objects
offsetfalsedefaults to 0.65 (roughly 2/3 the ttl), used to create the stale value by multiplying the ttl by offset
verbosefalsedefaults to false turn this on for really noisey cache stats and debugging

cacheable api

functionsummary
cacheable(store).debug()debug logging, noisey, expensive stuff
cacheable(store).expired()check if cache state is expired
cacheable(store).fetch()fetches the cached collection
cacheable(store).flush()flush cache, supports Objects and Arrays
cacheable(store).set(collection)sets cached collection from provided param
cacheable(store).size()gets the cache size, if an object Object.keys() is called
cacheable(store).stale()determines if the cache is stale or not
cacheable(store).state()returns whether the cache is expired or not, if cache is expired, state will reset and flush the cache
cacheable(store).reset()restarts timers, will not flush cache

example

const { cacheable } = require('memory-cacheable');

const store = {
  key: 'expensiveCacheExample',
  ttl: '1h'
};

const expired = cacheable(store).state; // pulls state out to manage state and check if expired
const { stale, reset, flush } = cacheable(store); // other helpful tings

// simplest example usage
function doSomethingExpensive(fn) {
  if (!expired()) return fn(null, store.cache);
  return funcToExpensiveThings((err, resp) => {
    if (err) return fn(new Error(err), null);
    store.cache = resp;
    return fn(null, resp);
  });
}

// example usage for expensive or long running functions with 
// stale support
function doSomethingExpensive(fn) {
  const isStale = stale();
  if (!expired() && !isStale) return fn(null, store.cache);
  if (isStale) fn(null, store.cache);
  return funcToExpensiveThings((err, resp) => {
    if (err) return fn(new Error(err), null);
    store.cache = resp;
    if (isStale) return reset();
    return fn(null, resp);
  });
}

debugging

Uses the debug module, and you can set the following environment variable:

export DEBUG=cacheable:*

test

npm install --save-dev && npm test

Made with ♥

Keywords

FAQs

Package last updated on 12 Nov 2019

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc