feat: 全面优化系统 - 修复task1语法错误 + Bot超时保护 + 熔断重试 + Redis缓存 + SEO + 日志清理 + 内容质量评估
This commit is contained in:
@@ -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 };
|
||||
Reference in New Issue
Block a user