@opengis/fastify-table
Version:
core-plugins
43 lines (42 loc) • 1.66 kB
JavaScript
import { Redis } from "ioredis";
import config from "../../../../config.js";
import logger from "../../logger/getLogger.js";
import redisClients from "./redisClients.js";
config.ready = config.ready || {};
function getRedis({ db, host, port, closeClient = false, retryStrategy = (times) => Math.min(times * 500, 5000), enableOfflineQueue = true, lazyConnect = true, connectTimeout = 2000, maxRetriesPerRequest = 1, } = { db: 0 }) {
if (!config.redis && !host)
return null;
const key = host || port ? [host, port, db].join("-") : db;
// try to reconnect after connection error / disconnect
if (redisClients[key]?.status === "end" &&
typeof redisClients[key].connect === "function") {
redisClients[key].connect();
}
if (redisClients[key]) {
return redisClients[key];
}
const redisConfig = {
db,
prefix: `${config.pg?.database || "db"}:`,
host: host || config.redis?.host || "127.0.0.1",
port: port || config.redis?.port || 6379, // Redis port
family: 4, // 4 (IPv4) or 6 (IPv6)
closeClient,
retryStrategy,
enableOfflineQueue,
lazyConnect,
connectTimeout,
maxRetriesPerRequest,
};
redisClients[key] = new Redis(redisConfig);
redisClients[key].on("ready", () => {
config.ready[`redis:${key}`] = true;
});
redisClients[key].on("error", (err) => {
console.warn("⚠️ Ignored redis error:", err.message);
logger.file("redis", { error: err.toString() });
});
console.log("redis connected", db, host, port);
return redisClients[key];
}
export default getRedis;