Cache

在项目中,合理使用缓存对性能有很大的帮助。ThinkJS 提供了多种的缓存方式,包括:内存缓存、文件缓存、Memcache 缓存、Redis 缓存等。

缓存类型

系统默认支持的缓存类型如下:

  • memory 内存缓存
  • file 文件缓存
  • memcache Memcache 缓存
  • redis Redis 缓存
    如果使用 memcache 缓存,需要设置 Memcache 配置信息,见 配置

如果使用 redis 缓存,需要设置 Redis 配置信息,见 配置

缓存配置

默认缓存配置如下,可以在配置文件 src/common/config/cache.js 中进行修改:

  1. export default {
  2. type: 'file', //缓存类型
  3. timeout: 6 * 3600, //失效时间,单位:秒
  4. adapter: { //不同 adapter 下的配置
  5. file: {
  6. path: think.RUNTIME_PATH + '/cache', //缓存文件的根目录
  7. path_depth: 2, //缓存文件生成子目录的深度
  8. file_ext: '.json' //缓存文件的扩展名
  9. },
  10. redis: {
  11. prefix: 'thinkjs_'
  12. },
  13. memcache: {
  14. prefix: 'thinkjs_'
  15. }
  16. }
  17. };

2.0.6 版本开始添加了 adapter 配置。

其中 prefixmemcacheredis 类型中使用,存储时会将缓存 key + prefix 作为新的 key 来存储,用于防止跟其他地方使用的缓存 key 冲突。如果不想设置 prefix,可以将 prefix 设置为空字符串,如:

  1. export default {
  2. prefix: '' //将缓存 key 前缀设置为空
  3. }

使用缓存

可以通过 think.cache 方法对缓存进行增删改查操作,具体请见 API -> think

如果当前使用场景在继承自 think.http.base 的类下,可以通过 this.cache 方法来操作缓存,具体请见 API -> think.http.base

扩展缓存

可以通过下面的命令创建一个名为 foo 缓存类:

  1. thinkjs adapter cache/foo

执行完成后,会创建文件 src/common/adapter/cache/foo.js。扩展缓存类需要实现如下的方法:

  1. export default class extends think.cache.base {
  2. /**
  3. * 初始化方法
  4. * @param {Object} options []
  5. * @return {} []
  6. */
  7. init(options){
  8. //set gc type & start gc
  9. this.gcType = 'cache_foo';
  10. think.gc(this);
  11. }
  12. /**
  13. * 获取缓存
  14. * @param {String} name []
  15. * @return {Promise} []
  16. */
  17. get(name){
  18. }
  19. /**
  20. * 设置缓存
  21. * @param {String} name []
  22. * @param {Mixed} value []
  23. * @param {Number} timeout []
  24. * @return {Promise}
  25. */
  26. set(name, value, timeout){
  27. }
  28. /**
  29. * 删除缓存
  30. * @param {String} name []
  31. * @return {Promise} []
  32. */
  33. delete(name){
  34. }
  35. /**
  36. * 缓存垃圾回收
  37. * @return {Promise} []
  38. */
  39. gc(){
  40. }
  41. }

框架里的 Cache 实现请见 https://github.com/75team/thinkjs/tree/master/src/adapter/cache

使用第三方缓存 Adapter

如何使用第三方的缓存 Adapter 请参见 Adapter -> 介绍

原文: https://thinkjs.org/zh-cn/doc/2.2/adapter_cache.html