feat(cache): implement caching of routes
This commit is contained in:
4
src/utils/constants/keys.ts
Normal file
4
src/utils/constants/keys.ts
Normal file
@ -0,0 +1,4 @@
|
||||
export const titleKey = (titleId: string) => `title:${titleId}`;
|
||||
export const nameKey = (nameId: string) => `name:${nameId}`;
|
||||
export const findKey = (query: string) => `find:${query}`;
|
||||
export const mediaKey = (url: string) => `media:${url}`;
|
24
src/utils/getOrSetApiCache.ts
Normal file
24
src/utils/getOrSetApiCache.ts
Normal file
@ -0,0 +1,24 @@
|
||||
import redis from 'src/utils/redis';
|
||||
|
||||
const ttl = process.env.REDIS_CACHE_TTL_API ?? 30 * 60;
|
||||
const redisEnabled =
|
||||
process.env.USE_REDIS === 'true' || process.env.USE_REDIS_FOR_API_ONLY === 'true';
|
||||
|
||||
const getOrSetApiCache = async <T extends (...fetcherArgs: any[]) => Promise<any>>(
|
||||
key: string,
|
||||
fetcher: T,
|
||||
...fetcherArgs: Parameters<T>
|
||||
): Promise<ReturnType<T>> => {
|
||||
if (!redisEnabled) return await fetcher(...fetcherArgs);
|
||||
|
||||
const dataInCache = await redis.get(key);
|
||||
if (dataInCache) return JSON.parse(dataInCache);
|
||||
|
||||
const dataToCache = await fetcher(...fetcherArgs);
|
||||
|
||||
await redis.setex(key, ttl, JSON.stringify(dataToCache));
|
||||
|
||||
return dataToCache;
|
||||
};
|
||||
|
||||
export default getOrSetApiCache;
|
@ -2,7 +2,8 @@
|
||||
import Redis from 'ioredis';
|
||||
|
||||
const redisUrl = process.env.REDIS_URL;
|
||||
const toUseRedis = process.env.USE_REDIS === 'true';
|
||||
const toUseRedis =
|
||||
process.env.USE_REDIS === 'true' || process.env.USE_REDIS_FOR_API_ONLY === 'true';
|
||||
|
||||
const stub: Pick<Redis, 'get' | 'setex' | 'getBuffer'> = {
|
||||
get: async key => Promise.resolve(null),
|
||||
|
Reference in New Issue
Block a user