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 itemisLazy: (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 decoratedmethodName: The method name being decoratedargs: 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
