mirror of
https://github.com/DIYgod/RSSHub.git
synced 2025-12-12 16:20:27 +08:00
refactor(core): unified memory cache (#9395)
Signed-off-by: Rongrong <15956627+Rongronggg9@users.noreply.github.com>
This commit is contained in:
6
lib/middleware/cache/index.js
vendored
6
lib/middleware/cache/index.js
vendored
@@ -27,10 +27,10 @@ if (config.cache.type === 'redis') {
|
|||||||
globalCache.set = cacheModule.set;
|
globalCache.set = cacheModule.set;
|
||||||
} else if (config.cache.type === 'memory') {
|
} else if (config.cache.type === 'memory') {
|
||||||
cacheModule = require('./memory');
|
cacheModule = require('./memory');
|
||||||
const { pageCache } = cacheModule.clients;
|
const { memoryCache } = cacheModule.clients;
|
||||||
globalCache.get = (key) => {
|
globalCache.get = (key) => {
|
||||||
if (key && cacheModule.status.available) {
|
if (key && cacheModule.status.available) {
|
||||||
return pageCache.get(key);
|
return memoryCache.get(key, { updateAgeOnGet: false });
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
globalCache.set = (key, value, maxAge) => {
|
globalCache.set = (key, value, maxAge) => {
|
||||||
@@ -41,7 +41,7 @@ if (config.cache.type === 'redis') {
|
|||||||
value = JSON.stringify(value);
|
value = JSON.stringify(value);
|
||||||
}
|
}
|
||||||
if (key) {
|
if (key) {
|
||||||
return pageCache.set(key, value, { ttl: maxAge * 1000 });
|
return memoryCache.set(key, value, { ttl: maxAge * 1000 });
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
16
lib/middleware/cache/memory.js
vendored
16
lib/middleware/cache/memory.js
vendored
@@ -3,30 +3,24 @@ const config = require('@/config').value;
|
|||||||
|
|
||||||
const status = { available: false };
|
const status = { available: false };
|
||||||
|
|
||||||
const pageCache = new Lru({
|
const memoryCache = new Lru({
|
||||||
ttl: config.cache.routeExpire * 1000,
|
ttl: config.cache.routeExpire * 1000,
|
||||||
max: config.memory.max,
|
max: config.memory.max,
|
||||||
});
|
});
|
||||||
|
|
||||||
const routeCache = new Lru({
|
|
||||||
ttl: config.cache.routeExpire * 1000,
|
|
||||||
max: config.memory.max,
|
|
||||||
updateAgeOnGet: true,
|
|
||||||
});
|
|
||||||
|
|
||||||
status.available = true;
|
status.available = true;
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
get: (key, refresh = true) => {
|
get: (key, refresh = true) => {
|
||||||
if (key && status.available) {
|
if (key && status.available) {
|
||||||
let value = (refresh ? routeCache : pageCache).get(key);
|
let value = memoryCache.get(key, { updateAgeOnGet: refresh });
|
||||||
if (value) {
|
if (value) {
|
||||||
value = value + '';
|
value = value + '';
|
||||||
}
|
}
|
||||||
return value;
|
return value;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
set: (key, value, maxAge = config.cache.contentExpire, refresh = true) => {
|
set: (key, value, maxAge = config.cache.contentExpire) => {
|
||||||
if (!value || value === 'undefined') {
|
if (!value || value === 'undefined') {
|
||||||
value = '';
|
value = '';
|
||||||
}
|
}
|
||||||
@@ -34,9 +28,9 @@ module.exports = {
|
|||||||
value = JSON.stringify(value);
|
value = JSON.stringify(value);
|
||||||
}
|
}
|
||||||
if (key && status.available) {
|
if (key && status.available) {
|
||||||
return (refresh ? routeCache : pageCache).set(key, value, { ttl: maxAge * 1000 });
|
return memoryCache.set(key, value, { ttl: maxAge * 1000 });
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
clients: { pageCache, routeCache },
|
clients: { memoryCache },
|
||||||
status,
|
status,
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -27,7 +27,7 @@ module.exports = async (ctx) => {
|
|||||||
if (!data) {
|
if (!data) {
|
||||||
const res = await got.get(url);
|
const res = await got.get(url);
|
||||||
data = res.data;
|
data = res.data;
|
||||||
ctx.cache.set(url, data, config.cache.contentExpire, false);
|
ctx.cache.set(url, data, config.cache.contentExpire);
|
||||||
}
|
}
|
||||||
|
|
||||||
const $ = cheerio.load(data, { xmlMode: true });
|
const $ = cheerio.load(data, { xmlMode: true });
|
||||||
|
|||||||
@@ -130,7 +130,7 @@ module.exports = async (ctx) => {
|
|||||||
const token = rep.data.access_token;
|
const token = rep.data.access_token;
|
||||||
const uid = rep.data.uid;
|
const uid = rep.data.uid;
|
||||||
const expires_in = rep.data.expires_in;
|
const expires_in = rep.data.expires_in;
|
||||||
await ctx.cache.set('weibotimelineuid' + uid, token, expires_in, false);
|
await ctx.cache.set('weibotimelineuid' + uid, token, expires_in);
|
||||||
|
|
||||||
ctx.set({
|
ctx.set({
|
||||||
'Content-Type': 'text/html; charset=UTF-8',
|
'Content-Type': 'text/html; charset=UTF-8',
|
||||||
|
|||||||
@@ -62,7 +62,7 @@ module.exports = async (ctx) => {
|
|||||||
}
|
}
|
||||||
if (!noRefresh) {
|
if (!noRefresh) {
|
||||||
noRefresh = '0';
|
noRefresh = '0';
|
||||||
await ctx.cache.set('noRefreshCache', '1', undefined, false);
|
await ctx.cache.set('noRefreshCache', '1', undefined);
|
||||||
}
|
}
|
||||||
item.push({
|
item.push({
|
||||||
title: 'Cache Title',
|
title: 'Cache Title',
|
||||||
|
|||||||
Reference in New Issue
Block a user