Files
speckle-server/packages/server/modules/shared/redis/redis.ts
T
Gergő Jedlicska b77d70585e fix(redis): make redis client singleton from a module (#3469)
* fix(redis): make redis client singleton from a module

* fix(projectDownload): pass region key properly
2024-11-08 17:18:28 +01:00

37 lines
1.3 KiB
TypeScript

import { redisLogger } from '@/logging/logging'
import Redis, { RedisOptions } from 'ioredis'
import {
EnvironmentResourceError,
MisconfiguredEnvironmentError
} from '@/modules/shared/errors'
import { getRedisUrl } from '@/modules/shared/helpers/envHelper'
export function createRedisClient(redisUrl: string, redisOptions: RedisOptions): Redis {
let redisClient: Redis
try {
redisClient = new Redis(redisUrl, redisOptions)
redisClient.on('error', (err) => {
redisLogger.error(err, 'Redis encountered an error.')
if (err instanceof Error) {
throw new EnvironmentResourceError('Redis encountered an error.', err) //FIXME backoff and retry?
}
throw new EnvironmentResourceError('Redis encountered an error.') //FIXME backoff and retry?
})
} catch (err) {
redisLogger.error(err, 'Could not create Redis client')
if (err instanceof Error) {
throw new MisconfiguredEnvironmentError('Unable to connect to Redis.', err) //FIXME backoff and retry?
}
throw new MisconfiguredEnvironmentError('Unable to connect to Redis.') //FIXME backoff and retry?
}
return redisClient
}
let redisClient: Redis | undefined = undefined
export const getGenericRedis = (): Redis => {
if (!redisClient) redisClient = createRedisClient(getRedisUrl(), {})
return redisClient
}