comment เคลียร์ redis
This commit is contained in:
parent
c398354208
commit
84fd3fb9e5
2 changed files with 665 additions and 668 deletions
|
|
@ -8703,40 +8703,43 @@ export class OrganizationController extends Controller {
|
||||||
|
|
||||||
await queryRunner.commitTransaction();
|
await queryRunner.commitTransaction();
|
||||||
|
|
||||||
// Clear Redis cache after successful publish
|
// Clear Redis cache after successful publish (only menu and role for menu display)
|
||||||
const redis = require("redis");
|
// const redis = require("redis");
|
||||||
const { promisify } = require("util");
|
// const { promisify } = require("util");
|
||||||
const redisClient = redis.createClient({
|
// const redisClient = redis.createClient({
|
||||||
host: process.env.REDIS_HOST || "localhost",
|
// host: process.env.REDIS_HOST || "localhost",
|
||||||
port: parseInt(process.env.REDIS_PORT || "6379"),
|
// port: parseInt(process.env.REDIS_PORT || "6379"),
|
||||||
});
|
// });
|
||||||
const keysAsync = promisify(redisClient.keys).bind(redisClient);
|
// const keysAsync = promisify(redisClient.keys).bind(redisClient);
|
||||||
const delAsync = promisify(redisClient.del).bind(redisClient);
|
// const delAsync = promisify(redisClient.del).bind(redisClient);
|
||||||
|
|
||||||
try {
|
// try {
|
||||||
const [posMasterKeys, userKeys, orgKeys, menuKeys, roleKeys] = await Promise.all([
|
// // Clear only menu and role cache (affects menu display)
|
||||||
keysAsync("posMaster_*"),
|
// const menuRolePatterns = ["menu_*", "role_*"];
|
||||||
keysAsync("user_*"),
|
// let totalCleared = 0;
|
||||||
keysAsync("org_*"),
|
|
||||||
keysAsync("menu_*"),
|
|
||||||
keysAsync("role_*"),
|
|
||||||
]);
|
|
||||||
|
|
||||||
if (posMasterKeys.length > 0) await delAsync(...posMasterKeys);
|
// for (const pattern of menuRolePatterns) {
|
||||||
if (userKeys.length > 0) await delAsync(...userKeys);
|
// const keys = await keysAsync(pattern);
|
||||||
if (orgKeys.length > 0) await delAsync(...orgKeys);
|
// if (keys.length > 0) {
|
||||||
if (menuKeys.length > 0) await delAsync(...menuKeys);
|
// // Delete in chunks of 1000 to avoid argument limit
|
||||||
if (roleKeys.length > 0) await delAsync(...roleKeys);
|
// const chunkSize = 1000;
|
||||||
|
// for (let i = 0; i < keys.length; i += chunkSize) {
|
||||||
|
// const chunk = keys.slice(i, i + chunkSize);
|
||||||
|
// await delAsync(...chunk);
|
||||||
|
// }
|
||||||
|
// totalCleared += keys.length;
|
||||||
|
// console.log(`[moveDraftToCurrent] Cleared ${keys.length} cache keys for pattern: ${pattern}`);
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// console.log(`[moveDraftToCurrent] Total cache cleared: ${totalCleared} keys`);
|
||||||
|
// } catch (err) {
|
||||||
|
// console.error("[moveDraftToCurrent] Error clearing cache:", err);
|
||||||
|
// } finally {
|
||||||
|
// redisClient.quit();
|
||||||
|
// }
|
||||||
|
|
||||||
console.log(`[moveDraftToCurrent] Cleared cache: posMaster=${posMasterKeys.length}, user=${userKeys.length}, org=${orgKeys.length}, menu=${menuKeys.length}, role=${roleKeys.length}`);
|
// // Invalidate memory cache
|
||||||
} catch (err) {
|
// orgStructureCache.invalidate(currentRevisionId);
|
||||||
console.error("[moveDraftToCurrent] Error clearing cache:", err);
|
|
||||||
} finally {
|
|
||||||
redisClient.quit();
|
|
||||||
}
|
|
||||||
|
|
||||||
// Invalidate memory cache
|
|
||||||
orgStructureCache.invalidate(currentRevisionId);
|
|
||||||
|
|
||||||
return new HttpSuccess(summary);
|
return new HttpSuccess(summary);
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
|
|
|
||||||
|
|
@ -1737,6 +1737,7 @@ async function handler_org(msg: amqp.ConsumeMessage): Promise<boolean> {
|
||||||
}
|
}
|
||||||
|
|
||||||
async function clearMenuAndRoleCache(): Promise<void> {
|
async function clearMenuAndRoleCache(): Promise<void> {
|
||||||
|
console.log("[AMQ] clearMenuAndRoleCache: Starting...");
|
||||||
const redisClient = redis.createClient({
|
const redisClient = redis.createClient({
|
||||||
host: REDIS_HOST,
|
host: REDIS_HOST,
|
||||||
port: REDIS_PORT,
|
port: REDIS_PORT,
|
||||||
|
|
@ -1746,35 +1747,28 @@ async function clearMenuAndRoleCache(): Promise<void> {
|
||||||
const delAsync = promisify(redisClient.del).bind(redisClient);
|
const delAsync = promisify(redisClient.del).bind(redisClient);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const menuKeys = await keysAsync("menu_*");
|
// Clear menu and role cache (patterns that affect menu display)
|
||||||
if (menuKeys.length > 0) {
|
const menuRolePatterns = ["menu_*", "role_*"];
|
||||||
await delAsync(...menuKeys);
|
|
||||||
console.log(`[AMQ] Cleared ${menuKeys.length} menu cache keys`);
|
|
||||||
}
|
|
||||||
|
|
||||||
const roleKeys = await keysAsync("role_*");
|
for (const pattern of menuRolePatterns) {
|
||||||
if (roleKeys.length > 0) {
|
console.log(`[AMQ] Checking pattern: ${pattern}`);
|
||||||
await delAsync(...roleKeys);
|
const keys = await keysAsync(pattern);
|
||||||
console.log(`[AMQ] Cleared ${roleKeys.length} role cache keys`);
|
console.log(`[AMQ] Found ${keys.length} keys for pattern: ${pattern}`);
|
||||||
|
if (keys.length > 0) {
|
||||||
|
// Delete in chunks of 1000 to avoid argument limit
|
||||||
|
const chunkSize = 1000;
|
||||||
|
for (let i = 0; i < keys.length; i += chunkSize) {
|
||||||
|
const chunk = keys.slice(i, i + chunkSize);
|
||||||
|
await delAsync(...chunk);
|
||||||
}
|
}
|
||||||
|
console.log(`[AMQ] Cleared ${keys.length} cache keys for pattern: ${pattern}`);
|
||||||
const posMasterKeys = await keysAsync("posMaster_*");
|
} else {
|
||||||
if (posMasterKeys.length > 0) {
|
console.log(`[AMQ] No keys found for pattern: ${pattern}`);
|
||||||
await delAsync(...posMasterKeys);
|
|
||||||
console.log(`[AMQ] Cleared ${posMasterKeys.length} posMaster cache keys`);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const userKeys = await keysAsync("user_*");
|
|
||||||
if (userKeys.length > 0) {
|
|
||||||
await delAsync(...userKeys);
|
|
||||||
console.log(`[AMQ] Cleared ${userKeys.length} user cache keys`);
|
|
||||||
}
|
|
||||||
|
|
||||||
const orgKeys = await keysAsync("org_*");
|
|
||||||
if (orgKeys.length > 0) {
|
|
||||||
await delAsync(...orgKeys);
|
|
||||||
console.log(`[AMQ] Cleared ${orgKeys.length} org cache keys`);
|
|
||||||
}
|
}
|
||||||
|
console.log("[AMQ] clearMenuAndRoleCache: Completed successfully");
|
||||||
|
} catch (error) {
|
||||||
|
console.error("[AMQ] clearMenuAndRoleCache ERROR:", error);
|
||||||
} finally {
|
} finally {
|
||||||
redisClient.quit();
|
redisClient.quit();
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue