Cache

最后更新于:2022-04-01 04:34:06

[TOC=2,3] 在项目中,合理使用缓存对性能有很大的帮助。ThinkJS 提供了多种的缓存方式,包括:内存缓存、文件缓存、Memcache 缓存、Redis 缓存等。 ## 缓存类型 系统默认支持的缓存类型如下: * `base` 内存缓存 * `file` 文件缓存 * `memcache` Memcache 缓存 * `redis` Redis 缓存 如果使用 `memcache` 缓存,需要设置 Memcache 配置信息,见 [配置](https://thinkjs.org/zh-CN/doc/2.0/config.html#memcache)。 如果使用 `redis` 缓存,需要设置 Redis 配置信息,见 [配置](https://thinkjs.org/zh-CN/doc/2.0/config.html#redis)。 ## 缓存配置 默认缓存配置如下,可以在配置文件 `src/common/config/cache.js` 中进行修改: ~~~ export default { type: "file", //缓存类型 timeout: 6 * 3600, //失效时间,默认为 6 个小时 prefix: "thinkjs_", path: runtimePrefix + "/cache", path_depth: 2, file_ext: ".json" }; ~~~ 其中 `prefix` 在 `memcache` 和 `redis` 类型中使用,存储时会将缓存 key + prefix 作为新的 key 来存储,用于防止跟其他地方使用的缓存 key 冲突。如果不想设置 prefix,可以将 prefix 设置为空字符串,如: ~~~ export default { prefix: "" //将缓存 key 前缀设置为空 } ~~~ 其中 `path`,`path_depth` 和 `file_ext` 配置在 `file` 类型中使用: * `path` 缓存文件的根目录 * `path_depth` 缓存文件生成子目录的深度 * `file_ext` 缓存文件的扩展名 ## 使用缓存 可以通过 `think.cache` 方法对缓存进行增删改查操作,具体请见 [API -> think](https://thinkjs.org/zh-CN/doc/2.0/api_think.html#thinkcachename-value-options)。 如果当前使用场景在继承自 think.http.base 的类下,可以通过 `this.cache` 方法来操作缓存,具体请见 [API -> think.http.base](https://thinkjs.org/zh-CN/doc/2.0//api_think_http_base.html#cachename-value-options)。 ## 扩展缓存 可以通过下面的命令创建一个名为 `foo` 缓存类: ~~~ thinkjs adapter cache/foo ~~~ 执行完成后,会创建文件 `src/common/adapter/cache/foo.js`。扩展缓存类需要实现如下的方法: ~~~ export default class extends think.cache.base { /** * 初始化方法 * @param {Object} options [] * @return {} [] */ init(options){ //set gc type & start gc this.gcType = "cache_foo"; think.gc(this); } /** * 获取缓存 * @param {String} name [] * @return {Promise} [] */ get(name){ } /** * 设置缓存 * @param {String} name [] * @param {Mixed} value [] * @param {Number} timeout [] * @return {Promise} */ set(name, value, timeout){ } /** * 删除缓存 * @param {String} name [] * @return {Promise} [] */ delete(name){ } /** * 缓存垃圾回收 * @return {Promise} [] */ gc(){ } } ~~~ 框架里的 Cache 实现请见 [https://github.com/75team/thinkjs/tree/master/src/adapter/cache](https://github.com/75team/thinkjs/tree/master/src/adapter/cache)。 ## 使用第三方缓存 Adapter 如何使用第三方的缓存 Adapter 请参见 [Adapter -> 介绍](https://thinkjs.org/zh-CN/doc/2.0/adapter_intro.html#使用第三方-adapter)。
';