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: about 1 year 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 (over 3 years ago)
- Default Branch: main
- Last Pushed: 2023-07-10T23:30:44.000Z (almost 3 years ago)
- Last Synced: 2024-10-06T08:07:55.165Z (over 1 year 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


[](https://dl.circleci.com/status-badge/redirect/gh/slippyex/yet-another-redis-cache/tree/main)
[](https://codecov.io/gh/slippyex/yet-another-redis-cache)
# 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.
### 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 set
Besides 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
```