2025-04-24 06:08:36 +00:00

73 lines
1.4 KiB
JavaScript
Executable File

import Redis from "ioredis"
export function composeURL({ host, port, username, password } = {}) {
let url = "redis://"
if (username && password) {
url += username + ":" + password + "@"
}
url += host ?? "localhost"
if (port) {
url += ":" + port
}
return url
}
export default (params = {}) => {
let { REDIS_HOST, REDIS_PORT, REDIS_NO_AUTH, REDIS_AUTH, REDIS_DB } =
process.env
let clientOptions = {
host: REDIS_HOST ?? "localhost",
port: REDIS_PORT ?? 6379,
lazyConnect: true,
autoConnect: false,
...params,
}
// if redis auth is provided, set username and password
if (!ToBoolean(REDIS_NO_AUTH) && REDIS_AUTH) {
const [user, password] = REDIS_AUTH.split(":")
clientOptions.username = user
clientOptions.password = password
} else {
console.log("⚠️ Redis auth is disabled")
}
// if redis db is provided, set db
if (REDIS_DB) {
clientOptions.db = REDIS_DB
}
let client = new Redis(clientOptions)
client.on("error", (error) => {
console.error("❌ Redis client error:", error)
})
client.on("connect", () => {
console.log(`✅ Redis client connected [${process.env.REDIS_HOST}]`)
})
client.on("reconnecting", () => {
console.log("🔄 Redis client reconnecting...")
})
const initialize = async () => {
return await new Promise((resolve, reject) => {
console.log(`🔌 Connecting to Redis client [${REDIS_HOST}]`)
client.connect(resolve)
})
}
return {
client,
initialize,
}
}