59 lines
1.3 KiB
TypeScript
Executable File
59 lines
1.3 KiB
TypeScript
Executable File
// apps/api/src/redis.ts
|
|
import Redis from 'ioredis';
|
|
|
|
const redis = new Redis({
|
|
host: process.env.REDIS_HOST || 'redis',
|
|
port: parseInt(process.env.REDIS_PORT || '6379'),
|
|
password: process.env.REDIS_PASSWORD,
|
|
connectTimeout: 10000,
|
|
lazyConnect: true,
|
|
maxRetriesPerRequest: 3,
|
|
});
|
|
|
|
// 连接事件监听
|
|
redis.on('connect', () => {
|
|
console.log('Redis连接成功');
|
|
});
|
|
|
|
redis.on('ready', () => {
|
|
console.log('Redis准备就绪');
|
|
});
|
|
|
|
redis.on('error', (err) => {
|
|
console.error('Redis连接错误:', err);
|
|
});
|
|
|
|
redis.on('close', () => {
|
|
console.log('Redis连接已关闭');
|
|
});
|
|
|
|
redis.on('reconnecting', () => {
|
|
console.log('Redis重新连接中...');
|
|
});
|
|
|
|
// 优雅关闭处理
|
|
process.on('SIGINT', async () => {
|
|
console.log('正在关闭Redis连接...');
|
|
await redis.disconnect();
|
|
process.exit(0);
|
|
});
|
|
|
|
process.on('SIGTERM', async () => {
|
|
console.log('正在关闭Redis连接...');
|
|
await redis.disconnect();
|
|
process.exit(0);
|
|
});
|
|
|
|
// Redis连接初始化和健康检查
|
|
export const initRedis = async () => {
|
|
try {
|
|
await redis.ping();
|
|
console.log('Redis连接测试成功');
|
|
return true;
|
|
} catch (error) {
|
|
console.error('Redis连接测试失败:', error);
|
|
return false;
|
|
}
|
|
};
|
|
|
|
export default redis; |