Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/slippyex/yet-another-redis-cache
Yet another redis cache is, as the name implies, a redis cache implementation. But with the additional ability to bulk operate on cache keys (get/set/delete)
https://github.com/slippyex/yet-another-redis-cache
cache caching dependencies redis typescript yarn
Last synced: 2 months ago
JSON representation
Yet another redis cache is, as the name implies, a redis cache implementation. But with the additional ability to bulk operate on cache keys (get/set/delete)
- Host: GitHub
- URL: https://github.com/slippyex/yet-another-redis-cache
- Owner: slippyex
- License: mit
- Created: 2023-02-13T09:53:52.000Z (almost 2 years ago)
- Default Branch: main
- Last Pushed: 2023-07-10T23:30:44.000Z (over 1 year ago)
- Last Synced: 2024-10-06T08:07:55.165Z (3 months ago)
- Topics: cache, caching, dependencies, redis, typescript, yarn
- Language: TypeScript
- Homepage:
- Size: 628 KB
- Stars: 4
- Watchers: 1
- Forks: 0
- Open Issues: 8
-
Metadata Files:
- Readme: README.md
- Contributing: CONTRIBUTING.md
- License: LICENSE
Awesome Lists containing this project
README
![GitHub package.json version](https://img.shields.io/github/package-json/v/slippyex/yet-another-redis-cache)
![NPM](https://img.shields.io/npm/l/yet-another-redis-cache)
[![CircleCI](https://dl.circleci.com/status-badge/img/gh/slippyex/yet-another-redis-cache/tree/main.svg?style=shield)](https://dl.circleci.com/status-badge/redirect/gh/slippyex/yet-another-redis-cache/tree/main)
[![codecov](https://codecov.io/gh/slippyex/yet-another-redis-cache/branch/main/graph/badge.svg?token=B1NTASVMHG)](https://codecov.io/gh/slippyex/yet-another-redis-cache)
# YET ANOTHER REDIS CACHEAs 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.### Documentation
[TSDOC pages](https://slippyex.github.io/yet-another-redis-cache/)### 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
```bash
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
```typescript
// 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
```typescript
const cachedResults = await redisCache.getBulk(['identifier-2', 'identifier-3', 'identifier-10']);
```
The `cachedResults` will look like the following:
```json
{
"identifier-2": "bcdef1",
"identifier-3": "cdef12",
"identifier-10": null
}
```
Allowing you to retrieve the result for `identifier-10`, cache and return the whole setBesides the two bulk getter/setter, you can also use the regular get/set like
```typescript
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
```bash
yarn test
```