Skip to content

havsar/node-ts-cache

Repository files navigation

CI CI npm The MIT License

NPM

node-ts-cache

Simple and extensible caching module supporting decorators.

Install

npm install node-ts-cache

Note: The underlying storage layer must be installed separately.

Storages

Storage Install
memory npm install node-ts-cache-storage-memory
node-fs npm install node-ts-cache-storage-node-fs
ioredis npm install node-ts-cache-storage-ioredis

Usage

With decorator

Caches function response using the given options. Works with the above listed storages. By default, uses all arguments to build an unique key.

@Cache(container, options)

  • options:
    • ttl: (Default: 60) Number of seconds to expire the cachte item
    • isLazy: (Default: true) If true, expired cache entries will be deleted on touch. If false, entries will be deleted after the given ttl.
    • isCachedForever: (Default: false) If true, cache entry has no expiration.
    • calculateKey(data => string): (Default: JSON.stringify combination of className, methodName and call args)
      • data:
        • className: The class name for the method being decorated
        • methodName: The method name being decorated
        • args: The arguments passed to the method when called

Note: @Cache will consider the return type of the function. If the return type is a thenable, it will stay that way, otherwise not.

import { Cache, CacheContainer } from 'node-ts-cache'
import { MemoryStorage } from 'node-ts-cache-storage-memory'

const userCache = new CacheContainer(new MemoryStorage())

class MyService {
    @Cache(userCache, {ttl: 60})
    public async getUsers(): Promise<string[]> {
        return ["Max", "User"]
    }
}

Directly

import { CacheContainer } from 'node-ts-cache'
import { MemoryStorage } from 'node-ts-cache-storage-memory'

const myCache = new CacheContainer(new MemoryStorage())

class MyService {
    public async getUsers(): Promise<string[]> {
        const cachedUsers = await myCache.getItem<string[]>("users")

        if (cachedUsers) {
            return cachedUsers
        }

        const newUsers = ["Max", "User"]

        await myCache.setItem("users", newUsers, {ttl: 60})

        return newUsers
    }
}

Logging

This project uses debug to log useful caching information. Set environment variable DEBUG=node-ts-cache to enable logging.

Development & Testing

This project follows the monorepo architecture using lerna. To start development and run tests for all the packages, run:

git clone git@github.com:havsar/node-ts-cache.git
cd node-ts-cache
npm i
npm run bootstrap
npm run test