4.1.0 • Published 1 year ago
co-cache v4.1.0
co-cache
Cache result in redis for AsyncFunction.
Install
$ npm i co-cache --save
Usage
const cache = require('co-cache')(defaultConfig);
cache(fn[, options]) => AsyncFunction
defaultConfig {Object}:
options {Object|Number->expire}:
- client: {Object} redis client of ioredis.
- prefix: {String} prefix for redis cache, default
''
. - key: {String|Function|AsyncFunction} prefix + key == cacheKey, default
fn.name
, if returnfalse
, skip get&set cache. - expire: {Number} expire in ms.
- get: {Function|AsyncFunction} function to get cache.
- set: {Function|AsyncFunction} function to set cache.
- redisOpt: {Object} others options see ioredis
Example
$ DEBUG=co-cache node example.js
process.env.DEBUG = 'co-cache'
const cache = require('.')({
prefix: 'cache:',
expire: 10 * 60 * 1000 // default expire
})
;(async function () {
const someAsyncFn = cache(async function someAsyncFn (number) {
console.log(`someAsyncFn: ${number}`)
return number
}, {
key: function (number) {
if (number >= 4) {
return false // only cache when number < 4
}
return this.name + ':' + number
}
})
await someAsyncFn(1)
await someAsyncFn(2)
await someAsyncFn(2) // get from cache
await someAsyncFn.get(3)
await someAsyncFn.set(3, 'some value') // manually set cache
await someAsyncFn.get(3) // get from cache
await someAsyncFn(4) // not cache
await someAsyncFn.raw(5) // skip cache
await someAsyncFn.clear(1) // clear cache
await someAsyncFn.clear(2) // clear cache
await someAsyncFn.clear(3) // clear cache
await someAsyncFn.clear(4) // no effect, because there is no cache
})().catch(console.error)
Default get/set
function defaultGet (redis, cacheKey) {
return redis
.get(cacheKey)
.then((result) => {
if (result != null) {
return JSON.parse(result)
}
})
.catch(() => {})
}
function defaultSet (redis, cacheKey, result, ms) {
// cannot save `undefined`` value, `null` is ok
if (result === undefined) {
return
}
return redis
.set(cacheKey, JSON.stringify(result), 'PX', ms)
.catch(() => {})
}
Test
$ npm run test
License
MIT
4.1.0
1 year ago
4.0.0
1 year ago
3.1.0
3 years ago
3.0.0
6 years ago
2.5.0
7 years ago
2.4.1
8 years ago
2.4.0
8 years ago
2.3.1
8 years ago
2.3.0
8 years ago
2.2.0
9 years ago
2.1.1
9 years ago
2.1.0
9 years ago
2.0.1
10 years ago
2.0.0
10 years ago
1.2.0
10 years ago
1.1.1
10 years ago
1.1.0
10 years ago
1.0.0
10 years ago
0.0.5
10 years ago
0.0.4
10 years ago
0.0.3
10 years ago
0.0.2
10 years ago
0.0.1
10 years ago
0.0.0
10 years ago