Major Changes: - Add StreamingService with OpenAI Compatible format - Upgrade Chat component V2 with Ant Design X integration - Implement AIA module with 12 intelligent agents - Update API routes to unified /api/v1 prefix - Update system documentation Backend (~1300 lines): - common/streaming: OpenAI Compatible adapter - modules/aia: 12 agents, conversation service, streaming integration - Update route versions (RVW, PKB to v1) Frontend (~3500 lines): - modules/aia: AgentHub + ChatWorkspace (100% prototype restoration) - shared/Chat: AIStreamChat, ThinkingBlock, useAIStream Hook - Update API endpoints to v1 Documentation: - AIA module status guide - Universal capabilities catalog - System overview updates - All module documentation sync Tested: Stream response verified, authentication working Status: AIA V2.0 core completed (85%)
16 KiB
Redis蝻枏<EFBFBD> vs Redis<69>笔<EFBFBD> - 霂衣<E99C82>霂湔<E99C82>
*<EFBFBD><EFBFBD>﹝<EFBFBD><EFBFBD>𧋦嚗? V1.0
*<EFBFBD>𥕦遣<EFBFBD>交<EFBFBD>嚗? 2025-12-12
<EFBFBD>格<EFBFBD>霂餉<EFBFBD><EFBFBD><EFBFBD> 鈭批<E988AD>蝏讐<E89D8F><E8AE90><EFBFBD><EFBFBD><EFBFBD>睲犖<E79DB2>? *<EFBFBD>桃<EFBFBD>嚗? 瞉<><E79E89>Redis蝻枏<E89DBB><E69E8F>朙edis<69>笔<EFBFBD><E7AC94><EFBFBD>躹<EFBFBD>?
<EFBFBD><EFBFBD> <20>桀<EFBFBD>
- <EFBFBD>詨<EFBFBD>璁<EFBFBD>艙
- [敶枏<E695B6>蝟餌<E89D9F><E9A48C>笔<EFBFBD><E7AC94>嗆<EFBFBD><E59786>(#2-敶枏<E695B6>蝟餌<E89D9F><E9A48C>笔<EFBFBD><E7AC94>嗆<EFBFBD>?
- Redis蝻枏<EFBFBD> vs Redis<69>笔<EFBFBD>撖寞<E69296>
- [<5B>芰鍂Redis蝻枏<E89DBB><E69E8F><EFBFBD>蔣<EFBFBD>䓞(#4-<2D>芰鍂redis蝻枏<E89DBB><E69E8F><EFBFBD>蔣<EFBFBD>?
- <EFBFBD>舐鍂Redis<EFBFBD>笔<EFBFBD><EFBFBD><EFBFBD>𤣰<EFBFBD>𠹺<EFBFBD>憌𡡞埯
- <EFBFBD>刻<EFBFBD><EFBFBD>寞<EFBFBD>
1. <20>詨<EFBFBD>璁<EFBFBD>艙
1.1 隞<>銋<EFBFBD>糓Redis嚗?
Redis = 銝<>銝芷<E98A9D><E88AB7>扯<EFBFBD><E689AF><EFBFBD><EFBFBD>摮䀹㺭<E480B9>桀<EFBFBD>
<EFBFBD>臭誑<EFBFBD><EFBFBD>圾銝綽<EFBFBD>
- <EFBFBD>蘨 *頞<EFBFBD>之<EFBFBD><EFBFBD><EFBFBD>鈭怠<EFBFBD>摮睃<EFBFBD><EFBFBD>函征<EFBFBD>?
- <EFBFBD><EFBFBD> 霂餃<EFBFBD><EFBFBD>笔漲<EFBFBD><EFBFBD>翰嚗?ms<6D><73><EFBFBD>
- <EFBFBD>𠒣 *<EFBFBD>舀<EFBFBD><EFBFBD>唳旿<EFBFBD><EFBFBD><EFBFBD><EFBFBD>?
- <EFBFBD><EFBFBD> *憭帋葵<EFBFBD>滚𦛚<EFBFBD>典虾隞亙<EFBFBD>鈭?
Redis<EFBFBD>祈澈<EFBFBD>臭<EFBFBD>銝?*撌亙<E6928C>蝞?*嚗屸<E59A97><E5B1B8>X<EFBFBD>敺<EFBFBD><E695BA>撌亙<E6928C>嚗<EFBFBD>㺭<EFBFBD>桃<EFBFBD><E6A183><EFBFBD><EFBFBD>嚗?
- String嚗<EFBFBD><EFBFBD>蝚虫葡嚗争<EFBFBD>婙<EFBFBD>?<3F>其<EFBFBD>蝻枏<E89DBB>
- List嚗<EFBFBD><EFBFBD>銵剁<EFBFBD><EFBFBD>婙<EFBFBD>?<3F>其<EFBFBD><E585B6>笔<EFBFBD>
- Set嚗<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
- Hash嚗<EFBFBD><EFBFBD>撣諹”嚗?
- Sorted Set嚗<74><E59A97>摨誯<E691A8><E8AAAF><EFBFBD><EFBFBD>
1.2 Redis蝻枏<E89DBB> vs Redis<69>笔<EFBFBD>
餈嗘舅銝芣<EFBFBD>敹菜糓**雿輻鍂Redis<69><73><EFBFBD><EFBFBD>峕䲮撘?*嚗䔶<E59A97><E494B6>臭舅銝芯<E98A9D><E88AAF>𣬚<EFBFBD>鈭批<E988AD>嚗?
<EFBFBD>輸<EFBFBD>鈭駵edis摰硺<EFBFBD>嚗<EFBFBD><EFBFBD>韐凋僭<EFBFBD><EFBFBD><EFBFBD>
<20>?
<0A>臭誑<E887AD>峕𧒄<E5B395>其<EFBFBD>嚗?
<20>鎿<EFBFBD> Redis蝻枏<E89DBB>嚗<EFBFBD>鍂String<6E>唳旿蝏𤘪<E89D8F>嚗?
<20>婙<EFBFBD> Redis<69>笔<EFBFBD>嚗<EFBFBD>鍂List<73>唳旿蝏𤘪<E89D8F> + BullMQ摨橒<E691A8>
蝐餅<EFBFBD><EFBFBD><EFBFBD>圾嚗?
Redis = 銝<><E98A9D>见之璆潘<E79286><E6BD98>刻揚銋啁<E98A8B>嚗?
Redis蝻枏<E89DBB> = 憭扳未<E689B3>𣬚<EFBFBD>"敹恍<E695B9>埝<EFBFBD>"
- 摮䀝<E691AE>镼踴<E995BC><E8B8B4><EFBFBD>銝𡏭正
- <20>㕑<EFBFBD><E39591><EFBFBD>𧒄<EFBFBD>?
- <20>券<EFBFBD>䈑<EFBFBD>敹恍<E695B9><E6818D>䰻霂?
Redis<69>笔<EFBFBD> = 憭扳未<E689B3>𣬚<EFBFBD>"隡𣳇<E99AA1><F0A3B387>蒂"
- 隞餃𦛚<E9A483>㘾<EFBFBD>
- <20>厰◇摨誩<E691A8><E8AAA9>?
- <20>券<EFBFBD>䈑<EFBFBD>撘<EFBFBD>郊隞餃𦛚
2. 敶枏<E695B6>蝟餌<E89D9F><E9A48C>笔<EFBFBD><E7AC94>嗆<EFBFBD>?
2.1 隞<><E99A9E>璉<EFBFBD><E79289>亦<EFBFBD><E4BAA6>?<3F>?
*<EFBFBD>𤑳緵1嚗鋳ullMQ撌脣<EFBFBD>鋆<EFBFBD><EFBFBD><EFBFBD>芯蝙<EFBFBD>?
// backend/package.json (蝚?6銵?
"bullmq": "^5.65.0", // <20>?撌脣<E6928C>鋆<EFBFBD><E98B86>隞<EFBFBD><E99A9E>銝剜𧊋雿輻鍂
<EFBFBD>𤑳緵2嚗𡁜<EFBFBD><EFBFBD>滢蝙<EFBFBD>刻䌊<EFBFBD>𠉛<EFBFBD>MemoryQueue
// backend/src/common/jobs/JobFactory.ts
export class JobFactory {
private static createQueue(): JobQueue {
const queueType = process.env.QUEUE_TYPE || 'memory'; // <20>?暺䁅恕memory
switch (queueType) {
case 'memory':
return this.createMemoryQueue(); // <20>?敶枏<E695B6>雿輻鍂餈嗘葵
case 'database':
// TODO: 摰䂿緵DatabaseQueue // <20>?餈䀹瓷摰䂿緵
return this.createMemoryQueue();
}
}
}
*<EFBFBD>𤑳緵3嚗餷obQueue<EFBFBD>?銝芣<E98A9D>隞嗡葉鋡怠<E98BA1><E680A0>剁<EFBFBD><E58981>?0甈?
// 銝餉<E98A9D>雿輻鍂雿滨蔭嚗?
1. ExtractionController.ts (TODO瘜券<EFBFBD>)
2. DualModelExtractionService.ts (TODO瘜券<EFBFBD>)
3. test-platform-api.ts (瘚贝<EFBFBD>隞<EFBFBD><EFBFBD>)
4. test-platform-infrastructure.ts (瘚贝<EFBFBD>隞<EFBFBD><EFBFBD>)
2.2 <20>笔<EFBFBD><E7AC94><EFBFBD><EFBFBD><EFBFBD>餌<EFBFBD>
| 蝏<EFBFBD>辣 | 摰㕑<EFBFBD><EFBFBD>嗆<EFBFBD>? | 雿輻鍂<EFBFBD>嗆<EFBFBD>? | 霂湔<EFBFBD> |
|---|---|---|---|
| Redis蝻枏<EFBFBD> | <EFBFBD>?<3F>芷<EFBFBD>蝵? | <EFBFBD>?<3F>芯蝙<E88AAF>? | <EFBFBD>桀<EFBFBD><EFBFBD>函<EFBFBD><EFBFBD>烘emoryCache |
| Redis<EFBFBD>笔<EFBFBD> | <EFBFBD>?<3F>芷<EFBFBD>蝵? | <EFBFBD>?<3F>芯蝙<E88AAF>? | BullMQ撌脣<EFBFBD>鋆<EFBFBD><EFBFBD><EFBFBD>芸鍳<EFBFBD>? |
| <EFBFBD><EFBFBD><EFBFBD>蝻枏<EFBFBD> | <EFBFBD>?撌脣<E6928C><E884A3>? | <EFBFBD>?雿輻鍂銝? | HealthCheck<EFBFBD><EFBFBD>LM蝏𤘪<EFBFBD> |
| <EFBFBD><EFBFBD><EFBFBD><EFBFBD>笔<EFBFBD> | <EFBFBD>?撌脣<E6928C><E884A3>? | <EFBFBD>?雿輻鍂銝? | MemoryQueue |
蝏栞捏嚗?
- <EFBFBD>?<3F>函<EFBFBD>蝟餌<E89D9F>撌脩<E6928C>憸<EFBFBD><E686B8>鈭<EFBFBD><E988AD><EFBFBD>埈沲<E59F88><E6B2B2><EFBFBD>MemoryQueue嚗?
- <EFBFBD>?撌脩<E6928C>摰㕑<E691B0>鈭<EFBFBD>ullMQ靘肽<E99D98>
- <EFBFBD>?雿<><E99BBF><EFBFBD><EFBFBD><EFBFBD>瘝⊥<E7989D><E28AA5><EFBFBD>迤雿輻鍂Redis嚗<73><E59A97>霈箸糓蝻枏<E89DBB>餈䀹糓<E480B9>笔<EFBFBD>嚗?
3. Redis蝻枏<E89DBB> vs Redis<69>笔<EFBFBD>撖寞<E69296>
3.1 <20>蠘<EFBFBD>撖寞<E69296>
| 蝏游漲 | Redis蝻枏<EFBFBD> | Redis<EFBFBD>笔<EFBFBD> |
|---|---|---|
| *<EFBFBD>券<EFBFBD>? | 摮睃<EFBFBD>銝湔𧒄<EFBFBD>唳旿 | 撘<EFBFBD>郊隞餃𦛚蝞∠<EFBFBD> |
| <EFBFBD>唳旿蝏𤘪<EFBFBD> | String嚗<EFBFBD><EFBFBD>蝚虫葡嚗? | List嚗<EFBFBD><EFBFBD>銵剁<EFBFBD> |
| <EFBFBD>滢<EFBFBD> | GET / SET / DELETE | PUSH / POP / ACK |
| 餈<EFBFBD><EFBFBD><EFBFBD>箏<EFBFBD> | TTL<EFBFBD>芸𢆡餈<EFBFBD><EFBFBD> | 隞餃𦛚摰峕<EFBFBD><EFBFBD>𤾸<EFBFBD><EFBFBD>? |
| 霂餃<EFBFBD>璅∪<EFBFBD> | <EFBFBD>𤩺㦤霂餃<EFBFBD> | 憿箏<EFBFBD>憭<EFBFBD><EFBFBD>嚗㇅IFO嚗? |
| <EFBFBD>詨<EFBFBD><EFBFBD>箸艶 | LLM蝏𤘪<EFBFBD>蝻枏<EFBFBD><EFBFBD><EFBFBD>ession | <EFBFBD><EFBFBD>讃蝑偦<EFBFBD>劐遙<EFBFBD>~<EFBFBD><EFBFBD>鸌<EFBFBD>誩<EFBFBD><EFBFBD>? |
| 摨?撌亙<E6928C> | <EFBFBD>湔𦻖<EFBFBD>甬oredis | BullMQ嚗<EFBFBD>抅鈭箸oredis嚗? |
3.2 <20>冽<EFBFBD>蝟餌<E89D9F>銝剔<E98A9D>摰鮋<E691B0>摨𠉛鍂
*Redis蝻枏<EFBFBD><EFBFBD><EFBFBD>鍂<EFBFBD>?
// <20>箸艶1嚗匁LM蝏𤘪<E89D8F>蝻枏<E89DBB>
const cacheKey = `fulltext:${literatureId}:${model}`;
await cache.set(cacheKey, llmResult, 3600); // 蝻枏<E89DBB>1撠𤩺𧒄
// 銝𧢲活<F0A7A2B2>詨<EFBFBD>PDF<44>齿<EFBFBD><E9BDBF>𡝗𧒄嚗?
const cached = await cache.get(cacheKey);
if (cached) {
return cached; // <20>?<3F>湔𦻖餈𥪜<E9A488>嚗諹<E59A97><E8ABB9><EFBFBD>PI韐寧鍂
}
**憟賢<E6869F>**嚗?
- <EFBFBD>?<3F>踹<EFBFBD><E8B8B9>滚<EFBFBD>靚<EFBFBD>鍂DeepSeek API嚗<49>?.43/蝭<><E89DAD>
- <EFBFBD>?<3F>滚<EFBFBD><E6BB9A>笔漲敹恬<E695B9>隞?<3F><><EFBFBD><EFBFBD>滚<EFBFBD>1ms嚗?
- <EFBFBD>?憭𡁜<E686AD>靘见<E99D98>鈭怎<E988AD>摮?
*Redis<EFBFBD>笔<EFBFBD><EFBFBD><EFBFBD>鍂<EFBFBD>?
// <20>箸艶2嚗𡁏<E59A97><F0A1818F>桃<EFBFBD><E6A183>劐遙<E58A90>∴<EFBFBD>199蝭<39><E89DAD><EFBFBD><EFBFBD>閬?0-60<36><30><EFBFBD>嚗?
export async function startScreening(projectId) {
// 1. <20>𥕦遣隞餃𦛚嚗<F0A69B9A><E59A97><EFBFBD>餃<EFBFBD>霂瑟<E99C82>嚗?
const task = await prisma.aslScreeningTask.create({...});
// 2. <20>券<EFBFBD><E588B8><EFBFBD><EFBFBD>笔<EFBFBD>嚗<EFBFBD><E59A97>甇亙<E79487><E4BA99><EFBFBD><EFBFBD>
await jobQueue.push('asl:screening', {
taskId: task.id,
projectId,
literatureIds: [1, 2, 3, ..., 199]
});
// 3. 蝡见朖餈𥪜<E9A488>嚗<EFBFBD><E59A97>蝡臬<E89DA1>憪贝蔭霂Z<E99C82>摨佗<E691A8>
return { taskId: task.id, status: 'pending' };
}
// <20>𤾸蝱Worker憭<72><E686AD><EFBFBD>笔<EFBFBD>
jobQueue.process('asl:screening', async (job) => {
for (const id of job.data.literatureIds) {
await processLiterature(id);
await jobQueue.updateProgress(job.id, ...);
}
});
**憟賢<E6869F>**嚗?
- <EFBFBD>?隞餃𦛚<E9A483><F0A69B9A><EFBFBD><EFBFBD>吔<EFBFBD>摰硺<E691B0><E7A1BA>滚鍳銝滢腺憭梧<E686AD>
- <EFBFBD>?<3F>舀<EFBFBD>隞餃𦛚隡睃<E99AA1>蝥?
- <EFBFBD>?<3F>舀<EFBFBD>隞餃𦛚<E9A483>滩<EFBFBD>
- <EFBFBD>?憭𡁜<E686AD>靘钅𡢿隞餃𦛚<E9A483><F0A69B9A><EFBFBD>
3.3 <20><><EFBFBD>臬<EFBFBD><E887AC>啣笆瘥?
// ==================== Redis蝻枏<E89DBB> ====================
import Redis from 'ioredis';
const redis = new Redis({
host: 'localhost',
port: 6379
});
// <20>坔<EFBFBD>蝻枏<E89DBB>
await redis.set('key', 'value', 'EX', 3600);
// 霂餃<E99C82>蝻枏<E89DBB>
const value = await redis.get('key');
// ==================== Redis<69>笔<EFBFBD> ====================
import { Queue, Worker } from 'bullmq';
// <20>𥕦遣<F0A595A6>笔<EFBFBD>
const queue = new Queue('asl:screening', {
connection: {
host: 'localhost',
port: 6379
}
});
// 瘛餃<E7989B>隞餃𦛚
await queue.add('screening', { projectId: 123 });
// <20>𥕦遣Worker憭<72><E686AD>隞餃𦛚
const worker = new Worker('asl:screening', async (job) => {
// 憭<><E686AD>隞餃𦛚
await processTask(job.data);
}, {
connection: { host: 'localhost', port: 6379 }
});
**<2A>喲睸<E596B2>?*嚗?
- <EFBFBD>?銝方<E98A9D><E696B9><EFBFBD>餈墧𦻖<E5A2A7>啣<EFBFBD>銝<EFBFBD>銝析edis摰硺<E691B0>
- <EFBFBD>?<3F>臭誑<E887AD>峕𧒄雿輻鍂嚗<E98D82><E59A97>銝滚僕<E6BB9A>堆<EFBFBD>
- <EFBFBD>?BullMQ<4D><51><EFBFBD>銋<EFBFBD>糓<EFBFBD>甬oredis摰䂿緵<E482BF>?
4. <20>芰鍂Redis蝻枏<E89DBB><E69E8F><EFBFBD>蔣<EFBFBD>?
4.1 <20>臭誑皛∟雲<E2889F><E99BB2><EFBFBD>瘙?<3F>?
-
LLM蝏𤘪<EFBFBD>蝻枏<EFBFBD> <20>?
- <EFBFBD>踹<EFBFBD><EFBFBD>滚<EFBFBD>API靚<EFBFBD>鍂
- <EFBFBD><EFBFBD><EFBFBD><EFBFBD>鞉𧋦
- <EFBFBD>𣂼<EFBFBD><EFBFBD>滚<EFBFBD><EFBFBD>笔漲
-
Session蝞∠<EFBFBD> <20>?
- 憭𡁜<EFBFBD>靘见<EFBFBD>鈭俟ession
- <EFBFBD>冽<EFBFBD><EFBFBD>嗆<EFBFBD><EFBFBD><EFBFBD>甇?
-
*<EFBFBD>亙熒璉<EFBFBD><EFBFBD>亦<EFBFBD>摮? <20>?
- <EFBFBD>踹<EFBFBD><EFBFBD>滚<EFBFBD>閫<EFBFBD><EFBFBD>Excel
-
<EFBFBD>剜<EFBFBD>隞餃𦛚 <20>?
- < 10蝘垍<E89D98>隞餃𦛚
- <EFBFBD>湔𦻖<EFBFBD>沈TTP霂瑟<EFBFBD>銝剖<EFBFBD><EFBFBD>?
4.2 <20>䭾<EFBFBD>皛∟雲<E2889F><E99BB2><EFBFBD>瘙?<3F>?
-
<EFBFBD>踵𧒄<EFBFBD>港遙<EFBFBD>⊥<EFBFBD>銋<EFBFBD><EFBFBD> <20>?
<EFBFBD>箸艶嚗𡁶鍂<EFBFBD>瑟<EFBFBD>鈭?99蝭<39><E89DAD><EFBFBD>桃<EFBFBD><E6A183>㚁<EFBFBD><E39A81><EFBFBD>閬?0-60<36><30><EFBFBD>嚗? 憒<><E68692><EFBFBD>芰鍂Redis蝻枏<E89DBB>嚗? - 隞餃𦛚<E9A483>嗆<EFBFBD><E59786><EFBFBD><EFBFBD>典<EFBFBD>摮?<3F>?摰硺<E691B0><E7A1BA>滚鍳銝W仃 - <20>䭾<EFBFBD><E4ADBE>W<EFBFBD>銝剜鱏<E5899C><E9B18F>遙<EFBFBD>? - <20>冽<EFBFBD><E586BD>见<EFBFBD>隞餃𦛚瘨<F0A69B9A>仃 -
隞餃𦛚<EFBFBD>笔<EFBFBD>蝞∠<EFBFBD> <20>?
<EFBFBD>箸艶嚗?0銝芰鍂<E88AB0>瑕<EFBFBD><E79195>嗆<EFBFBD>鈭斗鸌<E69697>譍遙<E8AD8D>? 憒<><E68692><EFBFBD>芰鍂Redis蝻枏<E89DBB>嚗? - <20>䭾<EFBFBD><E4ADBE>㘾<EFBFBD>嚗<EFBFBD><E59A97><EFBFBD>亙<EFBFBD><E4BA99>滚𦛚嚗? - <20>䭾<EFBFBD><E4ADBE>𣂼<EFBFBD>撟嗅<E6929F> - <20>滚𦛚<E6BB9A>典虾<E585B8>質◤<E8B3AA>梶<EFBFBD> -
隞餃𦛚<EFBFBD>滩<EFBFBD> <20>?
<EFBFBD>箸艶嚗𡁏<EFBFBD>蝭<EFBFBD><EFBFBD><EFBFBD>桀<EFBFBD><EFBFBD><EFBFBD>仃韐? 憒<><E68692><EFBFBD>芰鍂Redis蝻枏<E89DBB>嚗? - <20>䭾<EFBFBD><E4ADBE>芸𢆡<E88AB8>滩<EFBFBD> - <20><>閬<EFBFBD>鍂<EFBFBD>琿<EFBFBD><E790BF>唳<EFBFBD>鈭? -
*<EFBFBD><EFBFBD><EFBFBD>撘譍遙<EFBFBD>∪<EFBFBD><EFBFBD>? <20>?
<EFBFBD>箸艶嚗锭AE<EFBFBD>?銝芸<E98A9D>靘? 憒<><E68692><EFBFBD>芰鍂Redis蝻枏<E89DBB>嚗? - <20>䭾<EFBFBD><E4ADBE>讛<EFBFBD><E8AE9B>芯葵摰硺<E691B0>憭<EFBFBD><E686AD><EFBFBD>芯葵隞餃𦛚 - <20>航<EFBFBD><E888AA>滚<EFBFBD>憭<EFBFBD><E686AD>
4.3 摰鮋<E691B0>敶勗<E695B6>霂<EFBFBD>摯
*憒<EFBFBD><EFBFBD><EFBFBD>芸鍳<EFBFBD>沖edis蝻枏<EFBFBD>嚗?
| 敶勗<EFBFBD>蝏游漲 | 霂<EFBFBD><EFBFBD> | 霂湔<EFBFBD> |
|---|---|---|
| LLM<EFBFBD>鞉𧋦<EFBFBD>批<EFBFBD> | <EFBFBD>?隡条<E99AA1> | 蝻枏<EFBFBD><EFBFBD>賭葉嚗諹<EFBFBD><EFBFBD>?0-50%韐寧鍂 |
| *憭𡁜<EFBFBD>靘𧢲𣈲<EFBFBD>? | <EFBFBD>?隡条<E99AA1> | 蝻枏<EFBFBD><EFBFBD>曹澈 |
| *<EFBFBD>蹂遙<EFBFBD>∪虾<EFBFBD>䭾<EFBFBD>? | <EFBFBD>𩤃<EFBFBD> 銝<><E98A9D>? | 隞滨<EFBFBD>靘肽<EFBFBD>MemoryQueue |
| 隞餃𦛚蝞∠<EFBFBD><EFBFBD>賢<EFBFBD> | <EFBFBD>𩤃<EFBFBD> 銝<><E98A9D>? | <EFBFBD>牐<EFBFBD><EFBFBD><EFBFBD>漣<EFBFBD><EFBFBD><EFBFBD>霂? |
| *蝟餌<EFBFBD><EFBFBD>舀<EFBFBD>撅閙<EFBFBD>? | <EFBFBD>椬 銝剔<E98A9D> | <EFBFBD>訫<EFBFBD>靘见虾隞伐<EFBFBD>憭𡁜<EFBFBD>靘𧢲<EFBFBD><EFBFBD>桅<EFBFBD> |
5. <20>舐鍂Redis<69>笔<EFBFBD><E7AC94><EFBFBD>𤣰<EFBFBD>𠹺<EFBFBD>憌𡡞埯
5.1 <20>嗥<EFBFBD><E597A5><EFBFBD><EFBFBD> <20>兛
<EFBFBD>嗥<EFBFBD>1嚗帋遙<EFBFBD>⊥<EFBFBD>銋<EFBFBD><EFBFBD>
敶枏<EFBFBD>嚗㇈emoryQueue嚗㚁<EFBFBD>
- <20>冽<EFBFBD><E586BD>𣂷漱<F0A382B7>寥<EFBFBD>隞餃𦛚
- 摰硺<E691B0><E7A1BA>滚鍳 <20>?<3F>?隞餃𦛚銝W仃
- <20>冽<EFBFBD><E586BD>閗<EFBFBD><E99697><EFBFBD><EFBFBD>5-10%
<0A>寧鍂Redis<69>笔<EFBFBD>嚗?
- 隞餃𦛚靽嘥<E99DBD><E598A5>沖edis
- 摰硺<E691B0><E7A1BA>滚鍳 <20>?<3F>?隞餃𦛚蝏抒賒
- <20>冽<EFBFBD><E586BD>閗<EFBFBD><E99697><EFBFBD><EFBFBD>< 1%
*<EFBFBD>嗥<EFBFBD>2嚗帋遙<EFBFBD>⊿<EFBFBD>霂?
敶枏<EFBFBD>嚗㇈emoryQueue嚗㚁<EFBFBD>
- LLM靚<4D>鍂憭梯揖 <20>?<3F>?隞餃𦛚<E9A483><F0A69B9A>扇銝箏仃韐?
- <20><>閬<EFBFBD>鍂<EFBFBD>琿<EFBFBD><E790BF>唳<EFBFBD>鈭?
<0A>寧鍂Redis<69>笔<EFBFBD>嚗?
- LLM靚<4D>鍂憭梯揖 <20>?<3F>?<3F>芸𢆡<E88AB8>滩<EFBFBD>3甈?
- <20><>㺭<EFBFBD><E3BAAD><EFBFBD>選<EFBFBD>2蝘鉝<E89D98>?蝘鉝<E89D98>?蝘𡜐<E89D98>
<EFBFBD>嗥<EFBFBD>3嚗𡁜<EFBFBD>撣<EFBFBD><EFBFBD>隞餃𦛚<EFBFBD><EFBFBD><EFBFBD>
敶枏<EFBFBD>嚗㇈emoryQueue嚗㚁<EFBFBD>
- 瘥譍葵摰硺<E691B0><E7A1BA>祉<EFBFBD>憭<EFBFBD><E686AD>隞餃𦛚
- <20>䭾<EFBFBD><E4ADBE>讛<EFBFBD>
<0A>寧鍂Redis<69>笔<EFBFBD>嚗?
- 憭帋葵Worker<65>W<EFBFBD>隞餃𦛚
- <20>芸𢆡韐蠘蝸<E8A098><E89DB8>﹛
- <20>𣂷葵Worker<65><72><EFBFBD>嚗<EFBFBD><E59A97>隞頟orker<65>亦恣
*<EFBFBD>嗥<EFBFBD>4嚗帋遙<EFBFBD>∠<EFBFBD><EFBFBD>?
敶枏<EFBFBD>嚗㇈emoryQueue嚗㚁<EFBFBD>
- 隞餃𦛚<E9A483>嗆<EFBFBD><E59786>銁<EFBFBD><E98A81><EFBFBD>銝?
- <20>䭾<EFBFBD><E4ADBE>亦<EFBFBD><E4BAA6><EFBFBD>蟮隞餃𦛚
<0A>寧鍂Redis<69>笔<EFBFBD>嚗?
- 隞餃𦛚<E9A483><F0A69B9A>蟮靽嘥<E99DBD>
- <20>臭誑<E887AD>亦<EFBFBD>憭梯揖<E6A2AF>笔<EFBFBD>
- 蝏蠘恣憭<E681A3><E686AD><EFBFBD>園鵭
5.2 憌𡡞埯<F0A1A19E><E59FAF><EFBFBD> <20>𩤃<EFBFBD>
憌𡡞埯1嚗𡁜<EFBFBD><EFBFBD>惩<EFBFBD><EFBFBD><EFBFBD>漲 <20>椬 銝剔<E98A9D>
敶枏<EFBFBD>嚗?
- MemoryQueue嚗𡁶<E59A97><F0A181B6>𨰻<EFBFBD><F0A8B0BB><EFBFBD><EFBFBD><EFBFBD>圾
- 隞<><E99A9E><EFBFBD>𧶏<EFBFBD>~200銵?
<0A>嫣蛹BullMQ嚗?
- <20><>閬<EFBFBD>郎銋泎ullMQ API
- 隞<><E99A9E><EFBFBD>𧶏<EFBFBD>~500銵?
- <20><>閬<EFBFBD><E996AC>蝵娠orker
蝻栞圾嚗?
- <EFBFBD>?BullMQ<4D><51>﹝摰<EFB99D><E691B0>
- <EFBFBD>?蝷曉躹瘣餉<E798A3>嚗𠃑itHub 15k+ stars嚗?
- <EFBFBD>?<3F>睲賑撌脩<E6928C>摰㕑<E691B0>鈭<EFBFBD><E988AD>韏?
*憌𡡞埯2嚗帋<EFBFBD>韏餸edis蝔喳<EFBFBD><EFBFBD>? <20>椬 銝剔<E98A9D>
<EFBFBD>箸艶嚗鑹edis<EFBFBD><EFBFBD><EFBFBD>
- Redis蝻枏<E89DBB>嚗𡁜虾隞仿<E99A9E>蝥批<E89DA5><E689B9><EFBFBD><EFBFBD>
- Redis<69>笔<EFBFBD>嚗𡁏<E59A97>瘜閖<E7989C>蝥改<E89DA5><E694B9>笔<EFBFBD>敹<EFBFBD>◆<EFBFBD><E29786><EFBFBD><EFBFBD>吔<EFBFBD>
蝻栞圾嚗?
- <EFBFBD>?<3F>刻揚銋啁<E98A8B><E59581>舫<EFBFBD><E888AB>舐鍂<E88890>㇌edis嚗?9.95%嚗?
- <EFBFBD>?銝颱<E98A9D><E9A2B1>芸𢆡<E88AB8><F0A286A1>揢
- <EFBFBD>?摰鮋<E691B0>憌𡡞埯敺<E59FAF><E695BA>
*憌𡡞埯3嚗朞<EFBFBD>霂閖𠗕摨血<EFBFBD><EFBFBD>? <20>叚 雿?
敶枏<EFBFBD>嚗?
- console.log() <20>喳虾
- 隞餃𦛚<E9A483>典<EFBFBD>摮䀝葉
<0A>嫣蛹BullMQ嚗?
- <20><>閬<EFBFBD>䰻<EFBFBD>苄edis<69>唳旿
- <20><>閬<EFBFBD>鍂BullBoard嚗<64>虾閫<E899BE><E996AB>撌亙<E6928C>嚗?
蝻栞圾嚗?
- <EFBFBD>?BullBoard<72>𣂷<EFBFBD>Web UI
- <EFBFBD>?<3F>臭誑<E887AD>见<EFBFBD>隞餃𦛚<E9A483>嗆<EFBFBD><E59786><EFBFBD><EFBFBD><EFBFBD>霂閙活<E99699>?
- <EFBFBD>?<3F>亙<EFBFBD><E4BA99>渲祕蝏?
*憌𡡞埯4嚗𡁜<EFBFBD>摮睃<EFBFBD><EFBFBD>? <20>叚 雿?
<EFBFBD><EFBFBD><EFBFBD>嚗鑹edis<EFBFBD>笔<EFBFBD>隡𡁜<EFBFBD><EFBFBD>典<EFBFBD>憭𡁜<EFBFBD>摮矋<EFBFBD>
摰鮋<E691B0>嚗?
- <20>蓥葵隞餃𦛚<E9A483>唳旿嚗鰺1KB
- 100銝芸僎<E88AB8>睲遙<E79DB2>∴<EFBFBD>100KB
- 1000銝芯遙<E88AAF>∪<EFBFBD><E288AA>莎<EFBFBD>1MB
- 撖?56MB Redis敶勗<E695B6>敺<EFBFBD><E695BA>
5.3 憌𡡞埯<F0A1A19E>拚猐
| 憌𡡞埯 | 銝仿<EFBFBD><EFBFBD>? | 璁<EFBFBD><EFBFBD> | 蝻栞圾<EFBFBD>曉漲 | 撱箄悅 |
|---|---|---|---|---|
| *憓𧼮<EFBFBD>憭齿<EFBFBD>摨? | <EFBFBD>椬 銝? | <EFBFBD>𣞁 擃? | <EFBFBD>?<3F>? | <EFBFBD>𣂷<EFBFBD><EFBFBD>寡悌<EFBFBD><EFBFBD>﹝ |
| Redis靘肽<EFBFBD> | <EFBFBD>𣞁 擃? | <EFBFBD>叚 雿? | <EFBFBD>?<3F>? | 擃睃虾<EFBFBD>函<EFBFBD> |
| 靚<EFBFBD><EFBFBD><EFBFBD>圈𠗕 | <EFBFBD>叚 雿? | <EFBFBD>椬 銝? | <EFBFBD>?<3F>? | 雿輻鍂BullBoard |
| <EFBFBD><EFBFBD><EFBFBD><EFBFBD>删鍂 | <EFBFBD>叚 雿? | <EFBFBD>叚 雿? | <EFBFBD>?<3F>? | <EFBFBD>烐綉<EFBFBD>喳虾 |
蝏栞捏嚗𡁻<EFBFBD><EFBFBD>拙虾<EFBFBD>改<EFBFBD><EFBFBD>嗥<EFBFBD>憭找<EFBFBD>憌𡡞埯
6. <20>刻<EFBFBD><E588BB>寞<EFBFBD>
6.1 皜鞱<E79A9C>撘誩<E69298><E8AAA9>踝<EFBFBD><E8B89D>刻<EFBFBD>嚗争<E59A97>
<EFBFBD>嗆挾1嚗<EFBFBD>𧋦<EFBFBD>剁<EFBFBD>: <20>舐鍂Redis蝻枏<E89DBB>
<0A>鎿<EFBFBD> <20>格<EFBFBD>嚗朞圾<E69C9E>蚯LM<4C>鞉𧋦<E99E89>桅<EFBFBD>
<0A>鎿<EFBFBD> 撌乩<E6928C><E4B9A9>𧶏<EFBFBD>2憭?
<0A>鎿<EFBFBD> 憌𡡞埯嚗帋<E59A97>嚗<EFBFBD><E59A97><EFBFBD>滨漣<E6BBA8>寞<EFBFBD>嚗?
<0A>婙<EFBFBD> <20>嗥<EFBFBD>嚗朞<E59A97><E69C9E>?0-50% API韐寧鍂
<0A>嗆挾2嚗<32><E59A97><EFBFBD>剁<EFBFBD>: <20>舐鍂Redis<69>笔<EFBFBD>
<0A>鎿<EFBFBD> <20>格<EFBFBD>嚗朞圾<E69C9E>喲鵭隞餃𦛚<E9A483>舫<EFBFBD><E888AB>?
<0A>鎿<EFBFBD> 撌乩<E6928C><E4B9A9>𧶏<EFBFBD>3憭?
<0A>鎿<EFBFBD> 憌𡡞埯嚗帋葉嚗<E89189><E59A97><EFBFBD>舀綉嚗?
<0A>婙<EFBFBD> <20>嗥<EFBFBD>嚗帋遙<E5B88B>∩腺憭梁<E686AD><E6A281>滢<EFBFBD>10<31>?
<0A>嗆挾3嚗<33>𧊋<EFBFBD>伐<EFBFBD>: 隡睃<E99AA1>銝𡒊<E98A9D><F0A1928A>?
<0A>鎿<EFBFBD> BullBoard<72>航<EFBFBD><E888AA>?
<0A>鎿<EFBFBD> 隞餃𦛚隡睃<E99AA1>蝥?
<0A>鎿<EFBFBD> <20>扯<EFBFBD><E689AF>烐綉
<0A>婙<EFBFBD> <20>𡃏郎<F0A1838F>箏<EFBFBD>
6.2 霂衣<E99C82>摰墧鴌霈∪<E99C88>
<EFBFBD>嗆挾1嚗鑹edis蝻枏<EFBFBD>嚗<EFBFBD>𧋦<EFBFBD>剁<EFBFBD>
Day 1-2嚗𡁜<E59A97><F0A1819C>訌edisCacheAdapter
# <20><><EFBFBD><EFBFBD><EFBFBD>獢<EFBFBD><E78DA2>04-Redis<69>寥<EFBFBD>惩<EFBFBD><E683A9>質恣<E8B3AA>?md
# Phase 1-3
<0A>?摰㕑<E691B0>ioredis
<0A>?摰䂿緵RedisCacheAdapter
<0A>?瘛餃<E7989B><E9A483>滨漣蝑𣇉裦
<0A>?<3F>砍𧑐瘚贝<E7989A>
**撉峕𤣰<E5B395><F0A4A3B0><EFBFBD>**嚗?
<EFBFBD>?HealthCheckService蝻枏<E89DBB><E69E8F>賭葉
<0A>?LLM12FieldsService蝻枏<E89DBB><E69E8F>賭葉
<0A>?摰硺<E691B0><E7A1BA>滚鍳蝻枏<E89DBB>銝滢腺憭?
<0A>?Redis<69><73><EFBFBD>蝟餌<E89D9F>隞滚虾<E6BB9A>剁<EFBFBD><E58981>滨漣嚗?
<EFBFBD>嗆挾2嚗鑹edis<EFBFBD>笔<EFBFBD>嚗<EFBFBD><EFBFBD><EFBFBD>剁<EFBFBD>
Day 1嚗𡁜<E59A97><F0A1819C>訌edisQueue
// <20>𥕦遣嚗颹ackend/src/common/jobs/RedisQueue.ts
import { Queue, Worker } from 'bullmq';
export class RedisQueue implements JobQueue {
// ... 摰䂿緵
}
*Day 2嚗朞<E59A97>蝘颱<E89D98><E9A2B1>∩誨<E288A9>?
// 靽格㺿嚗窃creeningService.ts
// 隞𠬍<E99A9E>
processLiteraturesInBackground(task.id, ...);
// <20>嫣蛹嚗?
await jobQueue.push('asl:screening', {
taskId: task.id,
projectId,
literatures
});
Day 3嚗𡁏<E59A97>霂蓥<E99C82>銝羓瑪
<EFBFBD>?<3F>訫<EFBFBD>瘚贝<E7989A>
<0A>?<3F><><EFBFBD>瘚贝<E7989A>
<0A>?<3F>见<EFBFBD>瘚贝<E7989A>
<0A>?<3F><><EFBFBD>璅⊥<E79285>瘚贝<E7989A>
<0A>?<3F>啣漲<E595A3>穃<EFBFBD>
6.3 <20><>撠𤩺㺿<F0A4A9BA>冽䲮獢<E4B2AE><E78DA2>憒<EFBFBD><E68692>韏<EFBFBD><E99F8F><EFBFBD>厰<EFBFBD>嚗?
*憒<EFBFBD><EFBFBD><EFBFBD>芣<EFBFBD>1<EFBFBD>冽𧒄<EFBFBD>湛<EFBFBD>撱箄悅嚗?
隡睃<EFBFBD>蝥?嚗<><E59A97>憿鳴<E686BF>嚗鑹edis蝻枏<E89DBB>
- 閫<><E996AB>LLM<4C>鞉𧋦<E99E89>桅<EFBFBD>
- 撌乩<E6928C><E4B9A9>𧶏<EFBFBD>2憭?
隡睃<E99AA1>蝥?嚗<>虾<EFBFBD>㚁<EFBFBD>嚗鑹edis<69>笔<EFBFBD>
- <20><>𧒄靽脲<E99DBD>MemoryQueue
- 霈啣<E99C88><E595A3><EFBFBD><EFBFBD>臬<EFBFBD>箏𦛚
- 蝑厩鍂<E58EA9>瑁<EFBFBD>璅∪<E79285><E288AA>踹<EFBFBD><E8B8B9>齿㺿<E9BDBF>?
**<2A>斗鱏<E69697><E9B18F><EFBFBD>**嚗?
憒<EFBFBD><EFBFBD>皛∟雲隞乩<EFBFBD><EFBFBD>∩辣嚗<EFBFBD>虾隞交<EFBFBD>蝻𣫮edis<EFBFBD>笔<EFBFBD>嚗?
<0A>?<3F>冽<EFBFBD><E586BD>?< 20
<0A>?SAE<41>芣<EFBFBD>1銝芸<E98A9D>靘?
<0A>?<3F>寥<EFBFBD>隞餃𦛚銝漤<E98A9D>蝜<EFBFBD><E89D9C>瘥誩予 < 5銝迎<E98A9D>
<0A>?<3F>臭誑<E887AD>亙<EFBFBD><E4BA99>嗅<EFBFBD>隞餃𦛚銝W仃
<0A>血<EFBFBD>嚗<EFBFBD>遣霈桀偷敹怠鍳<E680A0>沖edis<69>笔<EFBFBD>
6.4 銝箔<E98A9D>銋㇂ullMQ撌脩<E6928C>摰㕑<E691B0>雿<EFBFBD>𧊋雿輻鍂嚗?
**<2A>冽<EFBFBD><E586BD>笔<EFBFBD>**嚗?
- 霈∪<EFBFBD>雿輻鍂雿<EFBFBD>𧊋摰墧鴌嚗𡁜<EFBFBD><EFBFBD>烐𧒄霈∪<EFBFBD><EFBFBD>步ullMQ嚗<EFBFBD><EFBFBD>摰㕑<EFBFBD>鈭<EFBFBD><EFBFBD>韏?
- **瘚贝<E7989A>餈<EFBFBD><E9A488><EFBFBD>芸鍳<E88AB8>?*嚗𡁜虾<F0A1819C>賢銁瘚贝<E7989A><E8B49D>臬<EFBFBD>撉諹<E69289>餈?
- **靘肽<E99D98>隡𣳇<E99AA1>?*嚗𡁜<E59A97>隞硋<E99A9E>靘肽<E99D98>鈭<EFBFBD>ullMQ
撱箄悅嚗?
- <EFBFBD>?靽萘<E99DBD>BullMQ靘肽<E99D98>嚗<EFBFBD>歇蝏誩<E89D8F>鋆<EFBFBD><E98B86>嚗?
- <EFBFBD>?<3F>券𧫴畾?<3F>嗥凒<E597A5>乩蝙<E4B9A9>剁<EFBFBD><E58981>𣳇<EFBFBD><F0A3B387>齿鰵摰㕑<E691B0>嚗?
- <EFBFBD>?憒<><E68692><EFBFBD><EFBFBD>𧒄銝滨鍂嚗䔶<E59A97>銝滨鍂<E6BBA8>𣳇膄嚗<E88684><E59A97>敶勗<E695B6><E58B97>扯<EFBFBD>嚗?
7. 撣貉<E692A3><E8B289>桅<EFBFBD> FAQ
Q1嚗鑹edis蝻枏<EFBFBD><EFBFBD>朙edis<EFBFBD>笔<EFBFBD><EFBFBD>賢<EFBFBD><EFBFBD>嗡蝙<EFBFBD>典<EFBFBD>嚗?
A1嚗𡁜虾隞伐<EFBFBD>摰<EFBFBD>賑雿輻鍂<EFBFBD>䔶<EFBFBD>銝析edis摰硺<EFBFBD>嚗䔶<EFBFBD><EFBFBD>臭<EFBFBD><EFBFBD>𣬚<EFBFBD><EFBFBD>唳旿蝏𤘪<EFBFBD><EFBFBD>?
Redis摰硺<EFBFBD>嚗?56MB嚗?
<0A>鎿<EFBFBD> 蝻枏<E89DBB><E69E8F>唳旿嚗𠄎tring嚗㚁<E59A97><E39A81>删鍂 ~50MB
<0A>婙<EFBFBD> <20>笔<EFBFBD><E7AC94>唳旿嚗𡿨ist嚗㚁<E59A97><E39A81>删鍂 ~10MB
------------------------------------
<0A>餉恣嚗鰺60MB / 256MB = 23% 雿輻鍂<E8BCBB>?
Q2嚗帋<EFBFBD><EFBFBD>沖edis<EFBFBD>笔<EFBFBD>嚗𣬚鍂<EFBFBD>唳旿摨㯄<EFBFBD><EFBFBD>堒虾隞亙<EFBFBD>嚗?
A2嚗𡁜虾隞乩<EFBFBD>銝齿綫<EFBFBD>僐<EFBFBD>?
| <EFBFBD>寞<EFBFBD> | 隡睃飵 | <EFBFBD><EFBFBD>飵 |
|---|---|---|
| Redis<EFBFBD>笔<EFBFBD> | 敹恬<EFBFBD>< 1ms嚗剹<E59A97><E589B9><EFBFBD><EFBFBD>賢<EFBFBD><E8B3A2>? | <EFBFBD><EFBFBD>閬<EFBFBD>edis |
| *<EFBFBD>唳旿摨㯄<EFBFBD><EFBFBD>? | 銝漤<EFBFBD>閬<EFBFBD><EFBFBD>憭碶<EFBFBD>韏? | <EFBFBD>g<EFBFBD>> 10ms嚗剹<E59A97><E589B9><EFBFBD><EFBFBD>賜<EFBFBD><E8B39C>? |
<EFBFBD>典歇蝏讛揚銋唬<EFBFBD>Redis嚗<EFBFBD>遣霈桃凒<EFBFBD>亦鍂Redis<EFBFBD>笔<EFBFBD><EFBFBD>?
Q3嚗𡁜<EFBFBD><EFBFBD>𨅯蘨<EFBFBD>舐鍂Redis蝻枏<EFBFBD>嚗𣬚頂蝏煺<EFBFBD><EFBFBD>厰䔮憸睃<EFBFBD>嚗?
A3嚗𡁶<EFBFBD><EFBFBD>笔<EFBFBD>銝滢<EFBFBD><EFBFBD>匧之<EFBFBD>桅<EFBFBD>嚗䔶<EFBFBD>摮睃銁憌𡡞埯<EFBFBD>?
<EFBFBD>?<3F>臭誑甇<E8AA91>虜餈鞱<E9A488>嚗?
- LLM<4C>鞉𧋦<E99E89>批<EFBFBD> <20>?
- 憭𡁜<E686AD>靘讠<E99D98>摮睃<E691AE>鈭?<3F>?
<0A>𩤃<EFBFBD> 瞏𨅯銁憌𡡞埯嚗?
- <20>蹂遙<E8B982>∪虾<E288AA>賭腺憭梧<E686AD>摰硺<E691B0><E7A1BA>滚鍳嚗?
- <20>䭾<EFBFBD><E4ADBE>滩<EFBFBD>憭梯揖隞餃𦛚
- <20>冽<EFBFBD>雿㯄<E99BBF>銝滢蔔
Q4嚗𡁜鍳<EFBFBD>沖edis<EFBFBD>笔<EFBFBD><EFBFBD>𠬍<EFBFBD><EFBFBD>賢炏<EFBFBD>鮋<EFBFBD><EFBFBD><EFBFBD>衽emoryQueue嚗?
A4嚗𡁜虾隞伐<EFBFBD>靽格㺿<EFBFBD>臬<EFBFBD><EFBFBD>㗛<EFBFBD><EFBFBD>喳虾<EFBFBD>?
# <20><>揢<EFBFBD>訌edis<69>笔<EFBFBD>
QUEUE_TYPE=redis
# <20>鮋<EFBFBD><E9AE8B><EFBFBD>啣<EFBFBD>摮㗛<E691AE><E3979B>?
QUEUE_TYPE=memory
雿<EFBFBD>釣<EFBFBD>𧶏<EFBFBD>Redis銝剔<EFBFBD><EFBFBD>芸<EFBFBD><EFBFBD>𣂷遙<EFBFBD>∩<EFBFBD>銝W仃<EFBFBD>?
Q5嚗鋳ullMQ<EFBFBD>曉郎<EFBFBD>梹<EFBFBD>
A5嚗帋<EFBFBD><EFBFBD>橘<EFBFBD><EFBFBD>詨<EFBFBD>API<EFBFBD>芣<EFBFBD>5銝芥<EFBFBD>?
// 1. <20>𥕦遣<F0A595A6>笔<EFBFBD>
const queue = new Queue('task');
// 2. 瘛餃<E7989B>隞餃𦛚
await queue.add('job', { data });
// 3. <20>𥕦遣Worker
const worker = new Worker('task', handler);
// 4. <20>穃𨯬鈭衤辣
worker.on('completed', ...);
worker.on('failed', ...);
// 5. <20>亥砭隞餃𦛚
const job = await queue.getJob(jobId);
憸<EFBFBD>恣摮虫<EFBFBD><EFBFBD>園𡢿嚗?*<2A>𠰴予**
8. <20>餌<EFBFBD>
8.1 <20>詨<EFBFBD>閬<EFBFBD><E996AC>
-
Redis蝻枏<EFBFBD> <20>?Redis<69>笔<EFBFBD>
- <EFBFBD>賣糓雿輻鍂<EFBFBD>䔶<EFBFBD>銝析edis摰硺<EFBFBD>
- <EFBFBD>芣糓雿輻鍂<EFBFBD>孵<EFBFBD>銝滚<EFBFBD>
-
<EFBFBD>函<EFBFBD>蝟餌<EFBFBD><EFBFBD>啁𠶖
- BullMQ撌脣<EFBFBD>鋆<EFBFBD><EFBFBD><EFBFBD>芯蝙<EFBFBD>?
- 敶枏<EFBFBD><EFBFBD>決emoryQueue嚗<EFBFBD>䌊<EFBFBD>𥪜<EFBFBD>摮㗛<EFBFBD><EFBFBD>梹<EFBFBD>
- <EFBFBD><EFBFBD>閬<EFBFBD>㺿<EFBFBD>䭾<EFBFBD><EFBFBD>賢鍳<EFBFBD>沖edis<EFBFBD>笔<EFBFBD>
-
<EFBFBD>刻<EFBFBD><EFBFBD>寞<EFBFBD>
- <EFBFBD>?<3F><>鍳<EFBFBD>沖edis蝻枏<E89DBB>嚗<EFBFBD>𧋦<EFBFBD>剁<EFBFBD>2憭抬<E686AD>
- <EFBFBD>?<3F>滚鍳<E6BB9A>沖edis<69>笔<EFBFBD>嚗<EFBFBD><E59A97><EFBFBD>剁<EFBFBD>3憭抬<E686AD>
- <EFBFBD>?皜鞱<E79A9C>撘誩<E69298><E8AAA9>踝<EFBFBD><E8B89D>滢<EFBFBD>憌𡡞埯
-
*<EFBFBD>芰鍂Redis蝻枏<EFBFBD><EFBFBD><EFBFBD>蔣<EFBFBD>?
- <EFBFBD>?<3F>臭誑閫<E8AA91><E996AB>LLM<4C>鞉𧋦<E99E89>桅<EFBFBD>
- <EFBFBD>𩤃<EFBFBD> <20>蹂遙<E8B982>∪虾<E288AA>䭾<EFBFBD>找<EFBFBD><E689BE>厰<EFBFBD><E58EB0>?
- <EFBFBD><EFBFBD> 撱箄悅嚗𡁏覔<F0A1818F>桃鍂<E6A183>瑁<EFBFBD>璅∪<E79285>摰𡁏糓<F0A1818F>血鍳<E8A180>券<EFBFBD><E588B8>?
-
*Redis<EFBFBD>笔<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?
- <EFBFBD>椬 憓𧼮<E68693>憭齿<E686AD>摨佗<E691A8>雿<EFBFBD>虾<EFBFBD>改<EFBFBD>
- <EFBFBD>叚 靘肽<E99D98>Redis蝔喳<E89D94><E596B3>改<EFBFBD>擃睃虾<E79D83>函<EFBFBD>99.95%嚗?
- <EFBFBD>?<3F>嗥<EFBFBD> > 憌𡡞埯
8.2 <20>喟<EFBFBD>撱箄悅
*憒<EFBFBD><EFBFBD><EFBFBD>函<EFBFBD>蝟餌<EFBFBD>皛∟雲隞乩<EFBFBD><EFBFBD>∩辣銋衤<EFBFBD>嚗<EFBFBD>遣霈桀偷敹怠鍳<EFBFBD>沖edis<EFBFBD>笔<EFBFBD>嚗?
<EFBFBD>?<3F>冽<EFBFBD><E586BD>?> 20
<0A>?SAE摰硺<E691B0><E7A1BA>?> 1
<0A>?<3F>寥<EFBFBD>隞餃𦛚憸𤑳<E686B8>嚗<EFBFBD><E59A97>憭?> 5銝迎<E98A9D>
<0A>?隞餃𦛚<E9A483>園鵭 > 10<31><30><EFBFBD>
<0A>?<3F>冽<EFBFBD><E586BD>望<EFBFBD>其遙<E585B6>∩腺憭?
*<EFBFBD>血<EFBFBD>嚗<EFBFBD>虾隞亙<EFBFBD><EFBFBD>舐鍂Redis蝻枏<EFBFBD>嚗屸<EFBFBD><EFBFBD>埈<EFBFBD>蝻瓐<EFBFBD>?
<EFBFBD><EFBFBD>﹝蝏湔擪<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>臬𣪧<E887AC>?
<EFBFBD><EFBFBD><EFBFBD>擧凒<EFBFBD>堆<EFBFBD> 2025-12-12
*<EFBFBD>詨<EFBFBD><EFBFBD><EFBFBD>﹝嚗? [Redis<69>寥<EFBFBD>惩<EFBFBD><E683A9>質恣<E8B3AA>哋(./04-Redis<69>寥<EFBFBD>惩<EFBFBD><E683A9>質恣<E8B3AA>?md)