This package provides get and set methods to interact with redis cache for a given express route.
yarn add @tictactrip/api-cache
import { ApiCache } from '@tictactrip/api-cache';
import { redisClient } from 'redis';
import { Request } from 'express';
// Redis connection
const redisClient = redis.createClient();
// Create your ApiCache instance
const apiCache = new ApiCache(redisClient);
const dataToCache = {
name: "apiCache",
description: "I can get and set on your redis cache."
}
// Caches "dataToCache" for 20 days
apiCache.set(request, dataToCache, 1000 * 60 * 60 * 24 * 20)
// Gets the data stored (returns null, if nothing found)
const cachedData = apiCache.get(request);
By default, Redis keys follow the below pattern (keys are in lowercase).
{prefix}{http_method}___{path}___{query}
Examples
- Example (route without query string)
Route: GET /users/9090/infos
Generated key: get__users/9090/infos__
- Example (route with query string)
Route: GET /users/9090/infos?param1=true¶m2=str
Generated key: get__users/9090/infos__param1trueparam2str
You can, however, define a key builder function of type TKeyBuilder
that is provided the express Request
and the prefix, and returns a string. If there is no key builder for a method, it just uses the default redis key builder.
import * as redis from 'redis';
import { Request } from 'express';
import { IApiCacheConfiguration, TKeyBuilder, EHttpMethod } from '@tictactrip/api-cache';
const getKeyBuilder: TKeyBuilder = (req: Request, prefix: string) => `${prefix}_${req.path}`;
const postKeyBuilder: TKeyBuilder = (req: Request, prefix: string) => `${prefix}_${req.path}_{req.body.data}$`;
const redisClient: redis.RedisClient = redis.createClient();
const configuration: IApiCacheConfiguration = {
prefix: 'prefix',
expirationInMS: 12_000_000,
keyBuilders: {
[EHttpMethod.GET]: getKeyBuilder,
[EHttpMethod.POST]: postKeyBuilder,
}
}
const apiCache = new ApiCache(redisClient, configuration);
You can pass an optional configuration on instantiation. It allows you to modify the prefix of Redis keys and also to edit the default cache duration.
By default, the prefix is an empty string (''
) and the cache duration is set on 1 day
.
import { IApiCacheConfiguration } from '@tictactrip/api-cache';
const configuration: IApiCacheConfiguration = {
prefix : 'myprefix__',
expirationInMS : 1000 * 60 * 60
}
const redisClient = redis.createClient();
// Create your ApiCache instance
const apiCache = new ApiCache(redisClient, configuration);
Run using yarn run <script>
command.
clean - Remove temporarily folders.
build - Compile source files.
build:watch - Interactive watch mode, compile sources on change.
lint - Lint source files.
lint:fix - Fix lint source files.
test - Runs all tests with coverage.
test:watch - Interactive watch mode, runs tests on change.
MIT © Tictactrip