feat(cache): implement caching of routes

This commit is contained in:
zyachel
2023-05-21 18:15:03 +05:30
parent 8599ae2c5a
commit c53c88db9b
9 changed files with 82 additions and 42 deletions

View 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;