diff --git a/keyserver/src/utils/redis-cache.js b/keyserver/src/utils/redis-cache.js index 6365683b2..8603c3c2b 100644 --- a/keyserver/src/utils/redis-cache.js +++ b/keyserver/src/utils/redis-cache.js @@ -1,51 +1,54 @@ // @flow import type { RedisClient } from 'redis'; import redis from 'redis'; import type { NeynarChannel } from 'lib/types/farcaster-types.js'; import { redisConfig } from '../socket/redis.js'; class RedisCache { - cacheClient: RedisClient; + _cacheClient: ?RedisClient; - constructor() { - this.cacheClient = redis.createClient(redisConfig); + get cacheClient(): RedisClient { + if (!this._cacheClient) { + this._cacheClient = redis.createClient(redisConfig); + } + return this._cacheClient; } setChannelInfo(fcChannelID: string, fcChannel: NeynarChannel): Promise { const stringifiedChannelInfo = JSON.stringify(fcChannel); return new Promise((resolve, reject) => { this.cacheClient.set( `channel:${fcChannelID}`, stringifiedChannelInfo, 'EX', 600, // item expires after 10 minutes err => { if (err) { return reject(err); } return resolve(); }, ); }); } getChannelInfo(fcChannelID: string): Promise { return new Promise((resolve, reject) => { this.cacheClient.get(`channel:${fcChannelID}`, (err, result) => { if (err) { return reject(err); } // Reset the expiration when the cached data is successfully retrieved this.cacheClient.expire(`channel:${fcChannelID}`, 600); return resolve(result ? JSON.parse(result) : null); }); }); } } const redisCache: RedisCache = new RedisCache(); export { redisCache };