@leadinvr/cache
v1.3.1
Published
cache module for nestjs
Downloads
27
Readme
cache
cache module for nestjs
Quick Start
This module is a wrap of node-redis for NestJS
It requires Redist V7.4 or later.
Register
CacheModule.register({
/* Register as global module, default is true */
isGlobal: true,
/** Redis url redis[s]://[[username][:password]@][host][:port][/db-number] */
/** If redis url is empty or undefined, only memory cache will be used */
redisUrl: "redis://localhost",
/** default workspace */
workspace: "demo",
/** default ttl in seconds */
ttl: 10,
});Async register
CacheModule.registerAsync({
/* Register as global module, default is true */
imports: [ConfigModule],
inject: [ConfigService],
useFactory: (configs: ConfigService) => ({
redisUrl: configs.get("REDIS_URL"),
workspace: "demo",
}),
});Use cache in controller
- Normal
@Cached("demo")
@Get("demo/sub")
async getSubjects(): Promise<string[]> {
return await this.configurations.getSubjects();
}- With query parameters, Cached tag end with ":"
@Cached("demo:data:", "10m")
@Get("demo/data")
async getData2(@Query("name") name: string): Promise<CommonResponseDto> {
const xml = await this.graphs.lanes.getLaneXML(name);
return CommonResponseDto.succ(xml);
}
- Revoke cache, tag can be key or with * to match all keys
@RevokeCache("demo:*")
@Delete("demo/remove")
async remove(@Query("name") name: string) {
await this.graphs.lanes.remove(name);
return CommonResponseDto.succ();
}Cache api
CacheService
/**
* get or set key value if not exist
* @param key key
* @param ttl ttl in seconds or string like 10m, 1h, 1d
* @param callback if key not exists, call this callback to get value, then save to cache
* @returns T
*/
async getOrSet<T>(
key: string,
ttl: number | string | undefined,
callback: () => Promise<T>
): Promise<T> /**
* try to get key value
* @param key key
* @returns
*/
async get<T>(key: string): Promise<T | undefined> /**
* set key value
* @param key key
* @param value value
* @param ttl ttl in seconds
* @returns
*/
async set<T>(key: string, value: T, ttl?: number | string): Promise<T> /**
* Remove a key
* @param key
*/
async remove(key: string): Promise<void> /**
* Remove keys by pattern
* @param keyPattern
*/
async removeAll(keyPattern: string): Promise<void> /**
* Key value exists
* @param key
* @returns
*/
async has(key: string): Promise<boolean>