It is very helpful to use caches proper correctly in projects. So, ThinkJS provide a variety of caching methods,includes: Memory cache, file cache, Memcache and redis.
ThinkJS supports the following cache types:
memory
Cache stored in Memoryfile
Cache stored in file systemmemcache
Cache stored in memcacheredis
Cache stored in redisIf you use Memcache or redis, you need set configuration information. See also configuration of memcache configuration of redis
The default cache configuration likes following. You can edit src/common/config/cache.js
to change the configration.
export default {
type: "file", // the cache type
timeout: 6 * 3600, // when the cache will expired , default is 6 hours.
adapter: { // configurations of different type adaptor
file: {
path: think.getPath(undefined, think.dirname.runtime) + '/cache', // the path cache files put in
path_depth: 2, // max depth generated by cache files
file_ext: '.json' // cache files extend name
},
redis: {
prefix: 'thinkjs_'
},
memcache: {
prefix: 'thinkjs_'
}
}
};
Note
:ThinkJS supports adaptor configuration from the version 2.0.6
.
In memcache or redis cache type, the prefix
field is used. In this case, ThinkJS uses key + prefix as the storage key to prevent the conflict with other projects. If you don't want to set prefix, you can set it to empty string, like this:
export default {
prefix: "" // it set the prefix of cache key to empty.
}
You can add, delete, update and search the cache by using method think.cache
, see also API -> think for more details.
You can usemethod this.cache
to operate cache, if your class is inherited from think.http.base
, see also API -> think.http.base for more details.
You can create a cache class named foo
by using following command:
thinkjs adapter cache/foo
After the completion of the excuting, ThinkJS will create the file src/common/adapter/cache/foo.js
. Then you need to implement the following methods to extend cache class:
export default class extends think.cache.base {
/**
* init
* @param {Object} options []
* @return {} []
*/
init(options){
//set gc type & start gc
this.gcType = 'cache_foo';
think.gc(this);
}
/**
* get cache
* @param {String} name []
* @return {Promise} []
*/
get(name){
}
/**
* set cache
* @param {String} name []
* @param {Mixed} value []
* @param {Number} timeout []
* @return {Promise}
*/
set(name, value, timeout){
}
/**
* delete cache
* @param {String} name []
* @return {Promise} []
*/
delete(name){
}
/**
* gc function
* @return {Promise} []
*/
gc(){
}
}
To know the implemation of cache in ThinkJS, please see also (https://github.com/75team/thinkjs/tree/master/src/adapter/cache)
To know how to use third party cache Adapter, please see also Adapter -> intro