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

@@ -7,6 +7,11 @@ const apiKeyService = require('./apiKeyService')
const unifiedOpenAIScheduler = require('./unifiedOpenAIScheduler')
const config = require('../../config/config')
const crypto = require('crypto')
const LRUCache = require('../utils/lruCache')
// lastUsedAt 更新节流(每账户 60 秒内最多更新一次,使用 LRU 防止内存泄漏)
const lastUsedAtThrottle = new LRUCache(1000) // 最多缓存 1000 个账户
const LAST_USED_AT_THROTTLE_MS = 60000
// 抽取缓存写入 token兼容多种字段命名
function extractCacheCreationTokens(usageData) {
@@ -39,6 +44,21 @@ class OpenAIResponsesRelayService {
this.defaultTimeout = config.requestTimeout || 600000
}
// 节流更新 lastUsedAt
async _throttledUpdateLastUsedAt(accountId) {
const now = Date.now()
const lastUpdate = lastUsedAtThrottle.get(accountId)
if (lastUpdate && now - lastUpdate < LAST_USED_AT_THROTTLE_MS) {
return // 跳过更新
}
lastUsedAtThrottle.set(accountId, now, LAST_USED_AT_THROTTLE_MS)
await openaiResponsesAccountService.updateAccount(accountId, {
lastUsedAt: new Date().toISOString()
})
}
// 处理请求转发
async handleRequest(req, res, account, apiKeyData) {
let abortController = null
@@ -259,10 +279,8 @@ class OpenAIResponsesRelayService {
return res.status(response.status).json(errorData)
}
// 更新最后使用时间
await openaiResponsesAccountService.updateAccount(account.id, {
lastUsedAt: new Date().toISOString()
})
// 更新最后使用时间(节流)
await this._throttledUpdateLastUsedAt(account.id)
// 处理流式响应
if (req.body?.stream && response.data && typeof response.data.pipe === 'function') {