缓存分类

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

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

数据库缓存 == Redis缓存

为了保持系统的向下兼容性,在默认情况下,数据库缓存就是 Redis缓存,相关的模块a-cache参数如下:

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

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

内存缓存

模块a-cache通过中间件机制向ctx注入了对象cache.mem

src/module/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');

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');

数据库缓存

模块a-cache通过中间件机制向ctx注入了对象cache.db

src/module/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');

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');

Redis缓存

模块a-cache通过中间件机制向ctx注入了对象cache.redis

src/module/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');

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');