node-ts-cache

Simple and extensible caching module supporting decorators

Downloads in past

Stats

StarsIssuesVersionUpdatedCreatedSize
node-ts-cache
4.4.03 years ago7 years agoMinified + gzip package size for node-ts-cache in KB

Readme

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