refactor(core): unified memory cache (#9395)

Signed-off-by: Rongrong <15956627+Rongronggg9@users.noreply.github.com>
This commit is contained in:
Rongrong
2022-03-28 22:55:29 +08:00
committed by GitHub
parent cd151f45ab
commit 501dff59d0
5 changed files with 11 additions and 17 deletions

View File

@@ -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 {

View File

@@ -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,
}; };

View File

@@ -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 });

View File

@@ -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',

View File

@@ -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',