A simple interface cacher based on ioredis.
Installation
npm i -S cache-redis-fg
1. 参数opt, redis配置
- @param {object} opt 数据库配置
- @param {number} opt.prefix 设置缓存的前缀
- @param {number} opt.expire 设置的失效时间, 单位s
- @param {object} opt.reids redis配置
- @param {String} opt.reids.host redis host配置
- @param {String} opt.reids.port redis port配置
- @param {String} opt.reids.db redis 存储db配置
new Cache(opt);
2. 参数payload, 缓存参数
- @param {object} payload
- @param {string} payload.key 要查找的key
- @param {function} payload.executor 如果未击中,要执行的
返回
- @return {Promise.} 缓存中数据(击中) 或executor返回数据(未击中)
const getShopes = (type) => { let result; switch (type) { case 1: result = Promise.reject(new Error('bad params')); break; case 2: result = Promise.resolve(undefined); break; case 3: result = Promise.resolve( { obj1: ['shop01', 'shop02', 1, 2], obj2: 2, }, ); break; default: result = Promise.resolve('sucessful'); } return result; };
const cache = new Cacher(); const payload = { key: 'getShopes', executor: getShopes.bind(null, 0), }; await cache.get(payload);
const opt1 = { redis: { db: '12', }, prefix: 'testCache_', expire: 100, }; const cache = new Cacher(opt1); const payload = { key: 'getShopes', executor: getShopes.bind(null, 0), }; await cache.get(payload);
const cache = new Cacher(); const payload = { key: 'getShopes', executor: getShopes.bind(null, 3), }; await cache.get(payload);
suppose remove the key in redis
const cache = new Cache(); cache.delete(key);
- if you Promise instance return result is undefined, the result would not to cache.
- if you expire time config < 0, would config expire time is 5s.