缓存分类

模块a-cache提供了三种缓存:

  1. 内存缓存:仅对当前进程有效
  2. Redis缓存:可跨进程跨机器使用
  3. 数据库缓存:可跨进程跨机器使用

内存缓存

模块a-cache提供了全局Bean组件cache.mem

src/suite-vendor/test-party/modules/test-party/backend/src/controller/test/cache/mem.js

- set

// set(name, value, timeout)
this.ctx.cache.mem.set('name', 'zhennann', 1000);
名称 缺省值 说明
name 缓存名称,属于当前模块
value 缓存值
timeout 0 缓存超时

- has

let res = this.ctx.cache.mem.has('name');

- get

let value = this.ctx.cache.mem.get('name');

- getset

let value = this.ctx.cache.mem.getset(name, 'zhen.nann');

- remove

this.ctx.cache.mem.remove('name');

- 跨模块访问

可访问其他模块定义的缓存

// other module's cache
const moduleCache = this.ctx.cache.mem.module('test-party');
// get
let value = moduleCache.get('name');

Redis缓存

模块a-cache提供了全局Bean组件cache.redis

src/suite-vendor/test-party/modules/test-party/backend/src/controller/test/cache/redis.js

- set

// set(name, value, timeout)
await this.ctx.cache.redis.set('name', 'zhennann', 1000);
名称 缺省值 说明
name 缓存名称,属于当前模块
value 缓存值
timeout 0 缓存超时

- has

let res = await this.ctx.cache.redis.has('name');

- get

let value = await this.ctx.cache.redis.get('name');

- getset

let value = await this.ctx.cache.redis.getset(name, 'zhen.nann');

- remove

await this.ctx.cache.redis.remove('name');

- 跨模块访问

可访问其他模块定义的缓存

// other module's cache
const moduleCache = this.ctx.cache.redis.module('test-party');
let value = await moduleCache.get('name');

数据库缓存

模块a-cache提供了全局Bean组件cache._dbcache.db

由于Redis缓存是后来增加的功能,之前的代码都是使用cache.db。而事实上,当Redis缓存实现后,绝大多数场景都会优先使用Redis缓存,为了保持系统的向下兼容性,cache.db===cache.rediscache._db才是真正用数据库作为缓存

可以通过以下参数来修改这种默认行为:

a-cache/backend/src/config/config.js

  // db
  config.db = {
    redis: true,
  };

src/suite-vendor/test-party/modules/test-party/backend/src/controller/test/cache/db.js

- set

// set(name, value, timeout)
await this.ctx.cache._db.set('name', 'zhennann', 1000);
名称 缺省值 说明
name 缓存名称,属于当前模块
value 缓存值
timeout 0 缓存超时

- has

let res = await this.ctx.cache._db.has('name');

- get

let value = await this.ctx.cache._db.get('name');

- getset

let value = await this.ctx.cache._db.getset(name, 'zhen.nann');

- remove

await this.ctx.cache._db.remove('name');

- 跨模块访问

可访问其他模块定义的缓存

// other module's cache
const moduleCache = this.ctx.cache._db.module('test-party');
let value = await moduleCache.get('name');