mirror of
https://github.com/DIYgod/RSSHub.git
synced 2025-12-09 14:40:23 +08:00
feat: support no refresh cache
This commit is contained in:
@@ -34,10 +34,10 @@ module.exports = function(app, options = {}) {
|
||||
});
|
||||
|
||||
app.context.cache = {
|
||||
get: async (key) => {
|
||||
get: async (key, refresh = true) => {
|
||||
if (key && available) {
|
||||
let value = await redisClient.get(key);
|
||||
if (value) {
|
||||
if (value && refresh) {
|
||||
redisClient.expire(key, config.cache.contentExpire);
|
||||
value = value + '';
|
||||
}
|
||||
@@ -81,16 +81,16 @@ module.exports = function(app, options = {}) {
|
||||
});
|
||||
|
||||
app.context.cache = {
|
||||
get: (key) => {
|
||||
get: (key, refresh = true) => {
|
||||
if (key && available) {
|
||||
let value = routeCache.get(key);
|
||||
let value = (refresh ? routeCache : pageCache).get(key);
|
||||
if (value) {
|
||||
value = value + '';
|
||||
}
|
||||
return value;
|
||||
}
|
||||
},
|
||||
set: (key, value, maxAge = config.cache.contentExpire) => {
|
||||
set: (key, value, maxAge = config.cache.contentExpire, refresh = true) => {
|
||||
if (!value || value === 'undefined') {
|
||||
value = '';
|
||||
}
|
||||
@@ -98,7 +98,7 @@ module.exports = function(app, options = {}) {
|
||||
value = JSON.stringify(value);
|
||||
}
|
||||
if (key && available) {
|
||||
return routeCache.set(key, value, maxAge * 1000);
|
||||
return (refresh ? routeCache : pageCache).set(key, value, maxAge * 1000);
|
||||
}
|
||||
},
|
||||
client: [pageCache, routeCache],
|
||||
|
||||
@@ -36,6 +36,24 @@ module.exports = async (ctx) => {
|
||||
link: `https://github.com/DIYgod/RSSHub/issues/0`,
|
||||
author: `DIYgod0`,
|
||||
});
|
||||
} else if (ctx.params.id === 'refreshCache') {
|
||||
let refresh = await ctx.cache.get('refreshCache');
|
||||
let noRefresh = await ctx.cache.get('noRefreshCache', false);
|
||||
if (!refresh) {
|
||||
refresh = '0';
|
||||
await ctx.cache.set('refreshCache', '1');
|
||||
}
|
||||
if (!noRefresh) {
|
||||
noRefresh = '0';
|
||||
await ctx.cache.set('noRefreshCache', '1', undefined, false);
|
||||
}
|
||||
item.push({
|
||||
title: 'Cache Title',
|
||||
description: refresh + ' ' + noRefresh,
|
||||
pubDate: new Date(`2019-3-1`).toUTCString(),
|
||||
link: `https://github.com/DIYgod/RSSHub/issues/0`,
|
||||
author: `DIYgod0`,
|
||||
});
|
||||
} else if (ctx.params.id === 'complicated') {
|
||||
item.push({
|
||||
title: `Complicated Title`,
|
||||
|
||||
@@ -4,7 +4,7 @@ const config = require('@/config').value;
|
||||
module.exports = async (ctx) => {
|
||||
const uid = ctx.params.uid;
|
||||
const feature = ctx.params.feature || 0;
|
||||
const token = await ctx.cache.get('weibotimelineuid' + uid);
|
||||
const token = await ctx.cache.get('weibotimelineuid' + uid, false);
|
||||
|
||||
if (token) {
|
||||
const response = await got.get(`https://api.weibo.com/2/statuses/home_timeline.json?access_token=${token}&count=100&feature=${feature}`);
|
||||
@@ -62,7 +62,7 @@ module.exports = async (ctx) => {
|
||||
const token = rep.data.access_token;
|
||||
const uid = rep.data.uid;
|
||||
const expires_in = rep.data.expires_in;
|
||||
await ctx.cache.set('weibotimelineuid' + uid, token, expires_in);
|
||||
await ctx.cache.set('weibotimelineuid' + uid, token, expires_in, false);
|
||||
|
||||
ctx.set({
|
||||
'Content-Type': 'text/html; charset=UTF-8',
|
||||
|
||||
@@ -64,7 +64,18 @@ describe('cache', () => {
|
||||
mock: 1,
|
||||
});
|
||||
expect(await app.context.cache.globalCache.get('mock')).toBe('{"mock":1}');
|
||||
});
|
||||
|
||||
await request.get('/test/refreshCache');
|
||||
await wait(1 * 1000 + 100);
|
||||
const response5 = await request.get('/test/refreshCache');
|
||||
const parsed5 = await parser.parseString(response5.text);
|
||||
await wait(2 * 1000 + 100);
|
||||
const response6 = await request.get('/test/refreshCache');
|
||||
const parsed6 = await parser.parseString(response6.text);
|
||||
|
||||
expect(parsed5.items[0].content).toBe('1 1');
|
||||
expect(parsed6.items[0].content).toBe('1 0');
|
||||
}, 10000);
|
||||
|
||||
it('redis', async () => {
|
||||
process.env.CACHE_TYPE = 'redis';
|
||||
@@ -106,7 +117,18 @@ describe('cache', () => {
|
||||
await app.context.cache.set('mock2', '2');
|
||||
await app.context.cache.set('mock2', '2');
|
||||
expect(await app.context.cache.get('mock2')).toBe('2');
|
||||
});
|
||||
|
||||
await request.get('/test/refreshCache');
|
||||
await wait(1 * 1000 + 100);
|
||||
const response5 = await request.get('/test/refreshCache');
|
||||
const parsed5 = await parser.parseString(response5.text);
|
||||
await wait(2 * 1000 + 100);
|
||||
const response6 = await request.get('/test/refreshCache');
|
||||
const parsed6 = await parser.parseString(response6.text);
|
||||
|
||||
expect(parsed5.items[0].content).toBe('1 1');
|
||||
expect(parsed6.items[0].content).toBe('1 0');
|
||||
}, 10000);
|
||||
|
||||
it('redis with quit', async () => {
|
||||
process.env.CACHE_TYPE = 'redis';
|
||||
|
||||
Reference in New Issue
Block a user