1.1.0 • Published 3 years ago

green-red-cache v1.1.0

Weekly downloads
6
License
Apache-2.0
Repository
github
Last release
3 years ago

Green/Red Cache

Caches a return of an async function for "green" and "red" periods.

  • Cache miss: calls the async function, then caches and returns the promise.
  • Green period: returns a cached promise of the async function or its resolved value.
  • Red period: same as during the green period, plus initiates a separate thread to update the cache.

Construct the cache

const CacheControl = require('green-red-cache')
const cache = new CacheControl(async (key) => {
	return await retrieveValueFromBackend(key)
}, options)

options

Type: object\ Optional: true

Optional cache initialization parameters.

green_period

Type: number\ Optional: true\ Default: 15000

How many milliseconds a value in the cache to be considered green.

red_period

Type: number\ Optional: true\ Default: 15000

How many milliseconds a value in the cache to be considered red.

timeout

Type: number\ Optional: true\ Default: undefined

How many milliseconds the async function has to complete before timeout exception raised.

Getting value

const value = await cache.get('my_key')

Try getting value without await

const value = cache.getgreen('my_key') || (await cache.get('my_key'))

Invalidate a cache entry

cache.clear('my_key')

Force an update of a cache entry

cache.update('my_key')

Remove garbage from the cache

setInterval(() => {
	for (const key of caches.garbage()) cache.clear(key)
}, 3600000)

Keep cache hot

setInterval(() => {
	for (const key of caches.passing()) cache.get(key)
}, 60000)

Handle parallel cache update errors

cache.on('fail', (key, error) => {
	console.log(`Failed to retrieve value of the ${key}`)
	console.log(error)
})