Cache module for appolo
.
Cache methods results using appolo-cache
with optional redis store
Installation
npm i @appolo/cache
Options
key | Description | Type | Default |
---|---|---|---|
id |
cacheProvider injector id | string |
cacheProvider |
connection |
redis connection string | string |
`` |
memory |
true to use memory store | boolean |
true |
db |
true to use redis store | boolean |
false |
maxSize |
max memory store items | number |
1000 |
keyPrefix |
redis prefix key | string |
c |
all option are optional and will be added as defaults to cache options in config/modules/all.ts
import {CacheModule} from '@appolo/cache';
export = async function (app: App) {
await app.module(new CacheModule({maxSize:100}));
// or with redis store
await app.module(new CacheModule({db:true,connection:"redis://redis-connection-string"}));
}
Cache Options
key | Description | Type | Default |
---|---|---|---|
id |
custom cache id | string |
className_methodName |
maxSize |
max cache size | number |
1000 |
maxAge |
set maximum age in ms of all cache items | number |
unlimited |
clone |
clone the cache result | boolean |
false |
interval |
set cache refresh interval in ms | number |
undefined |
resolver |
function to get the cache key by default the first argument will be used as the cache key. | function |
undefined |
multi |
if no resolver defined use all the arguments as key else use the first argument as key | boolean |
false |
peek |
use peek method instead of get | boolean |
false |
refresh |
refresh cache on half maxAge expire | boolean |
false |
keyPrefix |
redis prefix key | string |
c |
memory |
true to use memory store | boolean |
true |
db |
true to use redis store | boolean |
false |
dbMaxAge |
set maximum age in ms of all cache items in db if not defined maxAge will be used | number |
unlimited |
Usage
import { cache,define } from 'appolo';
@define()
export class SomeClass {
private counter = 0;
@cache()
method() {
return ++this.counter
}
// will be refreshed every 5 sec
@cache({interval:5000})
async method2(key:string) {
let result = await doSomeThingAsync(key)
return result;
}
// will try to get items from memroy with expire
// of 1 minute then from redis with expire of one hour
@cache({db:true,maxAge:60*1000,:dbMaxAge:60*1000*60})
async method2(key:string) {
let result = await doSomeThingAsync(key)
return result;
}
}
CacheProvider
createCache(options: ICacheOptions, valueFn: Function, scope?: any)
create new cache wrapper
- options - cache options
- valueFn - value function will be called to get the value
- scope - scope of the value function
getCacheById(id:string):Cache
return cache wrapper by id
Cache
cache wrapper instance
get<T>(...args: any[]): Promise<T> | T
get value from cache if not found the value fn will be called
get cache
return appolo-cache
instance