npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@risingstack/cache

v2.0.0

Published

Stale / Expire cache implementation.

Downloads

6

Readme

@risingstack/cache

Stale / Expire cache implementation.

CircleCI Known Vulnerabilities

Getting Started

npm install --save @risingstack/cache
yarn add @risingstack/cache

RSCache assumes Node version 6 or above.

To get started create an RSCache instance.

const RSCache = require('@risingstack/cache')

const memoryStore = new RSCache.MemoryStore()
const redisStore = new RSCache.RedisStore(/* ioredis options */)
const cache = new RSCache([memoryStore, redisStore], {
  timeout: 200
})

Wrap:

Wrap Promise into cache.

cache.wrap('key', () => Promise.resolve({
  value: { foo: 'bar' },
  cacheOptions: {
    stale: 50,   // stale is optional: refresh after stale
    expire: 100  // expire is required: only used when fn fails (0 removed from cache, undefined skips cache)
  }
}))
.then((value) => {
  console.log(value) // { foo: 'bar' }
})

or with global cache options, just:

cache.wrap('key', () => Promise.resolve({ foo: 'bar' }))
.then((value) => {
  console.log(value) // { foo: 'bar' }
}, {
  stale: 50,
  expire: 100
})

or with both. With both local and global cache options, the two objects are merged and local has higher priority.

stale: optional: refresh after stale, time until value can be used from cache expire: required: time until value can be used from cache if fn fails

0 <= stale < expire

Some examples:

  • { expire: 24 * 60 * 1000 }: use cache only at error
  • { expire: 24 * 60 * 1000, stale: 60 * 1000 }: use from cache until stale, use until expire at error

Examples

Check out the /examples folder.

cd examples/request
npm install # install dependencies in the example folder
npm start # run the example application

API

RSCache

new RSCache([store, ...], options) - store order specifies get precedency, which means that the cache will try to get the value from stores with lower indexes first

  • options: optional

    • timeout: optional, Number in milliseconds, maximum time that cache waits for get
  • get(key): get the value for the key or undefined if not found

  • set(key, value, options): sets the value

    • options: an Object of options:
      • expire: expiration time in ms
      • stale: stale time in ms
  • delete(key): delete a value for the key

  • clear(): remove all values

  • wrap(key, func, options): wrap a function with cache

    • func: a Function returning a Promise of value or Object of { value, cacheOptions }
      • cacheOptions: an Object of options:
        • expire: expiration time in ms
        • stale: stale time in ms
    • options: an Object of default options:
      • expire: expiration time in ms
      • stale: stale time in ms
  • getStats(): get and hit count

  • resetStats(): reset the statistics

Stores

  • get(key): get the value for the key or undefined if not found
  • set(key, value, options): sets the value
    • options: an Object of options:
      • expire: expiration time in ms
      • stale: stale time in ms
  • delete(key): delete a value for the key
  • clear(): remove all values
  • size(): size of the store
  • getStats(): get and hit count
  • resetStats(): reset the statistics

Implementations

  • new RSCache.LRUStore(options) - uses LRU cache
  • new RSCache.MemoryStore() - uses simple Map
  • new RSCache.RedisStore(options)
    • options: an Object of ioredis options

Stale if error

No cache

Skip cache, useful at 404 status code issue for example.

const error = new Error('error')
error.noCache = true