Files
RSSHub/lib/middleware/cache/redis.js
NeverBehave 0792f7ba25 feat(core): first attempt to init script standard (#8224)
- lazy load
- rate limit per path
- init .debug.json support
- docs
- maintainer
- radar
2021-09-22 05:41:00 -07:00

49 lines
1.3 KiB
JavaScript

const config = require('@/config').value;
const Redis = require('ioredis');
const logger = require('@/utils/logger');
const redisClient = new Redis(config.redis.url);
const status = { available: false };
redisClient.on('error', (error) => {
status.available = false;
logger.error('Redis error: ', error);
});
redisClient.on('end', () => {
status.available = false;
});
redisClient.on('connect', () => {
status.available = true;
logger.info('Redis connected.');
});
module.exports = {
get: async (key, refresh = true) => {
if (key && status.available) {
let value = await redisClient.get(key);
if (value && refresh) {
redisClient.expire(key, config.cache.contentExpire);
value = value + '';
}
return value;
}
},
set: (key, value, maxAge = config.cache.contentExpire) => {
if (!status.available) {
return;
}
if (!value || value === 'undefined') {
value = '';
}
if (typeof value === 'object') {
value = JSON.stringify(value);
}
if (key) {
return redisClient.set(key, value, 'EX', maxAge); // setMode: https://redis.io/commands/set
}
},
clients: { redisClient },
status,
};