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

yet-another-redis-cache

v0.2.5

Published

(Yet another) Redis backed caching service with ttl support and bulk getter/setter

Downloads

6

Readme

GitHub package.json version NPM CircleCI codecov

YET ANOTHER REDIS CACHE

As the name implies, this is yet another (booooring) Redis-backed cache. However, this is not completely true. In fact, it has some useful, not seen, functionality which I wanted to leverage for my own projects. And since I didn't find the features, I decided to release this as another npm package, trying to give back to the OS community.

Intro

So, long story short, the purpose of this package is ... guess what ... caching. Therefore, you will find the regular get/set methods plus some minimal options. Details to follow below.

The real interesting part comes, when you want to add (or get) more than just one value at once.

Let's say, I want to cache an arbitary amount of keys/vals at once.

For that I can now use getBulk and setBulk which allow me to add or retrieve these in one Redis backend call.

Getting started

yarn add yet-another-redis-cache

Features

  • Works out of the box
  • provides regular cache functionality like get, set, delete
  • provides bulk cache functionality getBulk, setBulk, deleteBulk (one Redis transaction)
  • flexible expiration of keys by either setting them on the instantiation or per setter

Usage

  // create cache instance with a default of 5 seconds ttl per entry and a group prefix "example"
  const redisCache = new RedisCache(process.env.REDIS_URL, { groupKeyPrefix: 'example', ttl: 5 });
  const valuesToCache = {
      "identifier-1": "abdcef",
      "identifier-2": "bcdef1",
      "identifier-3": "cdef12",
      "identifier-4": "99aabb"
  };
  await redisCache.setBulk(valuesToCache);

The above code snippet will run in one Redis transaction. When a new request with a (sub-)set of the above keys comes in, we can create a single-transaction cache lookup with the following code

  const cachedResults = await redisCache.getBulk(['identifier-2', 'identifier-3', 'identifier-10']);

The cachedResults will look like the following:

  {
      "identifier-2": "bcdef1",
      "identifier-3": "cdef12",
      "identifier-10": null
  }

Allowing you to retrieve the result for identifier-10, cache and return the whole set

Besides the two bulk getter/setter, you can also use the regular get/set like

  await redisCache.set('regular-key', {'test': true});
  ...
  ...
  const cachedValue: { test: boolean } = await redisCache.get('regular-key');

Additionally to the getter/setter, we can also delete(key: string) and deleteBulk(keys: string[]) explicit elements from the cache or get a list of keys with a certain pattern by calling await redisCache.keys('my-pattern*') for example.

Run tests

yarn test