feat(記憶與情緒快取): 記憶與情緒狀態加入 Redis 快取層,連不到時自動退回原行為
This commit is contained in:
Vendored
+26
@@ -0,0 +1,26 @@
|
||||
import { Redis } from "ioredis";
|
||||
import { log } from "@kokorone/shared";
|
||||
|
||||
let client: Redis | null = null;
|
||||
let loggedUnavailable = false;
|
||||
|
||||
// R-2:session 快取/情緒狀態即時讀寫改走 Redis。連線失敗時呼叫端一律要能安全退回原本的行為
|
||||
// (工作記憶退回行程記憶體 Map、情緒狀態退回直接讀寫 Prisma),Redis 只是加速層,不是新的必要依賴,
|
||||
// 這樣即使部署環境還沒有 Redis(例如這個沒有 Docker/sudo 的沙盒),既有行為也不會被打斷。
|
||||
export function getRedisClient(): Redis {
|
||||
if (!client) {
|
||||
client = new Redis(process.env.REDIS_URL ?? "redis://127.0.0.1:6379", {
|
||||
lazyConnect: true,
|
||||
maxRetriesPerRequest: 1,
|
||||
retryStrategy: () => null,
|
||||
connectTimeout: 300,
|
||||
});
|
||||
client.on("error", () => {
|
||||
if (!loggedUnavailable) {
|
||||
loggedUnavailable = true;
|
||||
log("啟動", "WRN", `Redis 無法連線(REDIS_URL=${process.env.REDIS_URL ?? "redis://127.0.0.1:6379"}),相關快取將退回原本行為`);
|
||||
}
|
||||
});
|
||||
}
|
||||
return client;
|
||||
}
|
||||
Reference in New Issue
Block a user