Simple and extensible caching module supporting decorators.
npm install node-ts-cache
Note: The underlying storage layer must be installed separately.
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 |
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"]
}
}
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
}
}
This project uses debug to log useful caching information. Set environment variable DEBUG=node-ts-cache to enable logging.
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