@playding/redis-cacher
v1.1.0
Published
A simple interface cacher based on ioredis
Downloads
4
Readme
interface-cacher
A simple cacher based on ioredis.
usage
npm i @playding/redis-cacher
const Cacher = require('@playding/redis-cacher');
const cacher = new Cacher();
const data = await cacher.get({
key: 'ding',
executor: async () => {
// logic
return 'dingding;
},
});
changelogs
20220913 lru mem cache
const data = await cache.get({
key: 'ding',
executor: () => 'dingding',
// 启用内存缓存
mem: true,
});
有些场景下,缓存数据是静态的。例如首页广告位,在运营配置后一般短时间不会改变,也不会随着入参变化。
在之前的版本中,数据从执行函数中生成后,通过 json stringify 变为 string 放到 redis 中。而后的其他服务实例可以通过固定的 key 从 redis 获取该 string,反过来通过 json parse 解析到实际数据如 object|array。
对于静态数据,此时反序列化成为了最耗时的操作,特别是对于大对象。通过内存二级缓存,减少 json parse,降低 cpu 时间,提速操作。
需要注意的是,该特性是通过增加内存资源消耗来实现,所以如果 mem.max 放的很高,或者 cache obj 很大,会带来比较明显的内存使用增加。
JSDoc
Table of Contents
constructor
Parameters
payload
get
使用 redis 为接口加缓存
Parameters
payload
Object
Examples
说明:以给getShops接口加缓存为例
要点:executor为一个返回bluebird 的promise
getShops接口如下:
const getShops = (type) => {
if (type === 0) {
return Promise.reject(new Error('bad params'));
}
return Promise.resolve(['shop01', 'shop02']);
};
使用方式:
const Cacher = require('interface-cacher');
const cacher = new Cacher();
const payload = {
key: 'getShops',
executor: getShops.bind(null, 1),
expire: 100
};
cacher.get(payload)
.then((data) => {
// process the data
})
.catch((err) => {
// handle the exception when encounter with error
});
const data = await cacher.get({
key: 'getShopes'
executor: getShops.bind(null, 1),
// 启用内存缓存,如果内存命中自己返回内存结果
// 如果内存没有,就会获取 redis 结果,解析后放到内存中
mem: true
}
Returns Promise<Object> 缓存中数据(击中) 或 executor 返回数据(未击中)
delete
删除指定缓存
Parameters
key
string 要删除 key