From 66677fe5ae19cd450dc15196b279770e59f004a2 Mon Sep 17 00:00:00 2001 From: Satsuki Yanagi <17376330+u1-liquid@users.noreply.github.com> Date: Sat, 25 May 2019 08:35:16 +0900 Subject: [PATCH] Enable query result cache for meta / stats / hashtags trend (#4978) --- src/db/postgre.ts | 12 ++++++++++++ src/server/api/endpoints/hashtags/trend.ts | 3 +++ src/server/api/endpoints/meta.ts | 2 +- src/server/api/endpoints/stats.ts | 8 ++++---- 4 files changed, 20 insertions(+), 5 deletions(-) diff --git a/src/db/postgre.ts b/src/db/postgre.ts index 04893efe2..8e2d585e9 100644 --- a/src/db/postgre.ts +++ b/src/db/postgre.ts @@ -96,6 +96,18 @@ export function initDb(justBorrow = false, sync = false, log = false) { extra: config.db.extra, synchronize: process.env.NODE_ENV === 'test' || sync, dropSchema: process.env.NODE_ENV === 'test' && !justBorrow, + cache: { + type: 'redis', + options: { + host: config.redis.host, + port: config.redis.port, + options:{ + auth_pass: config.redis.pass, + prefix: config.redis.prefix, + db: config.redis.db || 0 + } + } + }, logging: log, logger: log ? new MyCustomLogger() : undefined, entities: [ diff --git a/src/server/api/endpoints/hashtags/trend.ts b/src/server/api/endpoints/hashtags/trend.ts index 05d571851..53a351471 100644 --- a/src/server/api/endpoints/hashtags/trend.ts +++ b/src/server/api/endpoints/hashtags/trend.ts @@ -59,6 +59,7 @@ export default define(meta, async () => { .where(`note.createdAt > :date`, { date: new Date(Date.now() - rangeA) }) .andWhere(`note.tags != '{}'`) .select(['note.tags', 'note.userId']) + .cache(60000) // 1 min .getMany(); if (tagNotes.length === 0) { @@ -108,6 +109,7 @@ export default define(meta, async () => { .where(':tag = ANY(note.tags)', { tag: tag }) .andWhere('note.createdAt < :lt', { lt: new Date(Date.now() - (interval * i)) }) .andWhere('note.createdAt > :gt', { gt: new Date(Date.now() - (interval * (i + 1))) }) + .cache(60000) // 1 min .getRawOne() .then(x => parseInt(x.count, 10)) ))); @@ -119,6 +121,7 @@ export default define(meta, async () => { .select('count(distinct note.userId)') .where(':tag = ANY(note.tags)', { tag: tag }) .andWhere('note.createdAt > :gt', { gt: new Date(Date.now() - (interval * range)) }) + .cache(60000) // 1 min .getRawOne() .then(x => parseInt(x.count, 10)) )); diff --git a/src/server/api/endpoints/meta.ts b/src/server/api/endpoints/meta.ts index 4f418c63c..d18543f56 100644 --- a/src/server/api/endpoints/meta.ts +++ b/src/server/api/endpoints/meta.ts @@ -94,7 +94,7 @@ export const meta = { export default define(meta, async (ps, me) => { const instance = await fetchMeta(true); - const emojis = await Emojis.find({ host: null }); + const emojis = await Emojis.find({ where: { host: null }, cache: 3600000 }); // 1 hour const response: any = { maintainerName: instance.maintainerName, diff --git a/src/server/api/endpoints/stats.ts b/src/server/api/endpoints/stats.ts index f85109b4b..4dca62445 100644 --- a/src/server/api/endpoints/stats.ts +++ b/src/server/api/endpoints/stats.ts @@ -57,10 +57,10 @@ export default define(meta, async () => { driveUsageLocal, driveUsageRemote ] = await Promise.all([ - Notes.count(), - Notes.count({ userHost: null }), - Users.count(), - Users.count({ host: null }), + Notes.count({ cache: 3600000 }), // 1 hour + Notes.count({ where: { userHost: null }, cache: 3600000 }), + Users.count({ cache: 3600000 }), + Users.count({ where: { host: null }, cache: 3600000 }), federationChart.getChart('hour', 1).then(chart => chart.instance.total[0]), driveChart.getChart('hour', 1).then(chart => chart.local.totalSize[0]), driveChart.getChart('hour', 1).then(chart => chart.remote.totalSize[0]),