feat: 全面优化系统 - 修复task1语法错误 + Bot超时保护 + 熔断重试 + Redis缓存 + SEO + 日志清理 + 内容质量评估

This commit is contained in:
ZhuiGuangAI Dev
2026-06-13 15:26:39 +08:00
parent a0a60ee9dc
commit b44601bb66
12 changed files with 399 additions and 12 deletions
+67
View File
@@ -0,0 +1,67 @@
import Redis from "ioredis";
let _redis = null;
function getRedis() {
if (!_redis) {
_redis = new Redis({
host: process.env.REDIS_HOST || "127.0.0.1",
port: parseInt(process.env.REDIS_PORT || "6379"),
password: process.env.REDIS_PASSWORD || undefined,
db: parseInt(process.env.REDIS_DB || "1"),
lazyConnect: true,
maxRetriesPerRequest: 2,
retryStrategy: (times) => Math.min(times * 200, 3000),
});
_redis.on("error", (err) => {
console.warn(`[redis-cache] Connection error: ${err.message}`);
});
}
return _redis;
}
async function cacheGet(key) {
try {
const redis = getRedis();
if (redis.status !== "ready") {
await redis.connect().catch(() => {});
}
if (redis.status !== "ready") return null;
const data = await redis.get(key);
return data ? JSON.parse(data) : null;
} catch {
return null;
}
}
async function cacheSet(key, value, ttlSeconds = 3600) {
try {
const redis = getRedis();
if (redis.status !== "ready") {
await redis.connect().catch(() => {});
}
if (redis.status !== "ready") return;
await redis.set(key, JSON.stringify(value), "EX", ttlSeconds);
} catch {
// 静默失败,不影响主流程
}
}
async function cacheDel(key) {
try {
const redis = getRedis();
if (redis.status !== "ready") return;
await redis.del(key);
} catch {
// 静默失败
}
}
async function disconnectRedis() {
if (_redis) {
await _redis.quit().catch(() => {});
_redis = null;
}
}
export { getRedis, cacheGet, cacheSet, cacheDel, disconnectRedis };