跳到主要内容

ZenWeb Cache Module

基于 Redis 的对象缓存工具

功能如下:

  • 对象缓存
  • 大对象自动压缩
  • JSON 序列直接输出
  • 防止缓存击穿
  • 单例执行

安装

yarn add @zenweb/cache
src/index.ts
import { create } from 'zenweb';
import modCache from '@zenweb/cache';

const app = create();

app.setup(modCache());

app.start();

使用

import { Context, mapping } from "zenweb";
import { $cache, cached } from "@zenweb/cache";

export class CacheController {
/**
* 一般使用
*/
@mapping()
async index() {
const result = await $cache.lockGet('TEST', function() {
return {
cacheAt: new Date(),
};
});
return result;
}

/**
* 大对象压缩存储
*/
@mapping()
async big() {
const result = await $cache.lockGet('TEST-GZ', function() {
return longData;
});
return result;
}

/**
* 大对象直接输出 - 1
*/
@mapping()
async big_direct_out(ctx: Context) {
const result = await $cache.lockGet('TEST-GZ', function() {
return longData;
}, { parse: false, decompress: false });
if (result.compressed) {
ctx.set('Content-Encoding', 'gzip');
}
ctx.type = 'json';
ctx.body = result.data;
}

/**
* 使用缓存中间件
* - 自动处理是否需要解压缩对象
*/
@mapping({
middleware: cached('TEST-middleware'),
})
async cached_middleware() {
return longData;
}
}