Skip to content

tictactrip/api-cache

Repository files navigation

api-cache

Dependencies Build License PRs Welcome

Description

This package provides get and set methods to interact with redis cache for a given express route.

Install

yarn add @tictactrip/api-cache

How to use it?

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);

Key structure

Default

By default, Redis keys follow the below pattern (keys are in lowercase).

{prefix}{http_method}___{path}___{query}

Examples

  1. Example (route without query string)

Route: GET /users/9090/infos Generated key: get__users/9090/infos__

  1. Example (route with query string)

Route: GET /users/9090/infos?param1=true&param2=str Generated key: get__users/9090/infos__param1trueparam2str

Custom

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);

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);

Scripts

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.

License

MIT © Tictactrip