feat: 大规模性能优化 - Redis Pipeline 批量操作、索引系统、连接池优化

This commit is contained in:
SunSeekerX
2025-12-31 02:08:47 +08:00
parent a345812cd7
commit 584fa8c9c1
68 changed files with 6541 additions and 4536 deletions

View File

@@ -129,6 +129,7 @@ class ClaudeConsoleAccountService {
logger.debug(`[DEBUG] Account data to save: ${JSON.stringify(accountData, null, 2)}`)
await client.hset(`${this.ACCOUNT_KEY_PREFIX}${accountId}`, accountData)
await redis.addToIndex('claude_console_account:index', accountId)
// 如果是共享账户,添加到共享账户集合
if (accountType === 'shared') {
@@ -167,11 +168,18 @@ class ClaudeConsoleAccountService {
async getAllAccounts() {
try {
const client = redis.getClientSafe()
const keys = await client.keys(`${this.ACCOUNT_KEY_PREFIX}*`)
const accountIds = await redis.getAllIdsByIndex(
'claude_console_account:index',
`${this.ACCOUNT_KEY_PREFIX}*`,
/^claude_console_account:(.+)$/
)
const keys = accountIds.map((id) => `${this.ACCOUNT_KEY_PREFIX}${id}`)
const accounts = []
const dataList = await redis.batchHgetallChunked(keys)
for (const key of keys) {
const accountData = await client.hgetall(key)
for (let i = 0; i < keys.length; i++) {
const key = keys[i]
const accountData = dataList[i]
if (accountData && Object.keys(accountData).length > 0) {
if (!accountData.id) {
logger.warn(`⚠️ 检测到缺少ID的Claude Console账户数据执行清理: ${key}`)
@@ -449,6 +457,7 @@ class ClaudeConsoleAccountService {
// 从Redis删除
await client.del(`${this.ACCOUNT_KEY_PREFIX}${accountId}`)
await redis.removeFromIndex('claude_console_account:index', accountId)
// 从共享账户集合中移除
if (account.accountType === 'shared') {
@@ -577,7 +586,7 @@ class ClaudeConsoleAccountService {
}
await client.hset(accountKey, updateData)
logger.success(`Rate limit removed and account re-enabled: ${accountId}`)
logger.success(`Rate limit removed and account re-enabled: ${accountId}`)
}
} else {
if (await client.hdel(accountKey, 'rateLimitAutoStopped')) {
@@ -585,7 +594,7 @@ class ClaudeConsoleAccountService {
` Removed stale auto-stop flag for Claude Console account ${accountId} during rate limit recovery`
)
}
logger.success(`Rate limit removed for Claude Console account: ${accountId}`)
logger.success(`Rate limit removed for Claude Console account: ${accountId}`)
}
return { success: true }
@@ -858,7 +867,7 @@ class ClaudeConsoleAccountService {
}
await client.hset(accountKey, updateData)
logger.success(`Blocked status removed and account re-enabled: ${accountId}`)
logger.success(`Blocked status removed and account re-enabled: ${accountId}`)
}
} else {
if (await client.hdel(accountKey, 'blockedAutoStopped')) {
@@ -866,7 +875,7 @@ class ClaudeConsoleAccountService {
` Removed stale auto-stop flag for Claude Console account ${accountId} during blocked status recovery`
)
}
logger.success(`Blocked status removed for Claude Console account: ${accountId}`)
logger.success(`Blocked status removed for Claude Console account: ${accountId}`)
}
return { success: true }
@@ -967,7 +976,7 @@ class ClaudeConsoleAccountService {
await client.hdel(`${this.ACCOUNT_KEY_PREFIX}${accountId}`, 'overloadedAt', 'overloadStatus')
logger.success(`Overload status removed for Claude Console account: ${accountId}`)
logger.success(`Overload status removed for Claude Console account: ${accountId}`)
return { success: true }
} catch (error) {
logger.error(
@@ -1416,7 +1425,7 @@ class ClaudeConsoleAccountService {
}
}
logger.success(`Reset daily usage for ${resetCount} Claude Console accounts`)
logger.success(`Reset daily usage for ${resetCount} Claude Console accounts`)
} catch (error) {
logger.error('Failed to reset all daily usage:', error)
}
@@ -1489,7 +1498,7 @@ class ClaudeConsoleAccountService {
await client.hset(accountKey, updates)
await client.hdel(accountKey, ...fieldsToDelete)
logger.success(`Reset all error status for Claude Console account ${accountId}`)
logger.success(`Reset all error status for Claude Console account ${accountId}`)
// 发送 Webhook 通知
try {