From c87940251e6bc34a1c3f600298a769cc1c7a5556 Mon Sep 17 00:00:00 2001 From: archer <545436317@qq.com> Date: Thu, 18 Dec 2025 10:48:33 +0800 Subject: [PATCH] add pipeline delete keys --- packages/service/common/cache/index.ts | 6 +++++- packages/service/common/redis/index.ts | 2 +- test/mocks/common/redis.ts | 7 ++++++- 3 files changed, 12 insertions(+), 3 deletions(-) diff --git a/packages/service/common/cache/index.ts b/packages/service/common/cache/index.ts index dc4f5f3ca..0744ddcd8 100644 --- a/packages/service/common/cache/index.ts +++ b/packages/service/common/cache/index.ts @@ -23,7 +23,11 @@ export const refreshVersionKey = async (key: `${SystemCacheKeyEnum}`, id?: strin const pattern = `${cachePrefix}${key}`; const keys = await getAllKeysByPrefix(pattern); if (keys.length > 0) { - await redis.del(keys); + const pipeline = redis.pipeline(); + for (const k of keys) { + pipeline.del(k); + } + await pipeline.exec(); } } else { await redis.set(versionKey, val); diff --git a/packages/service/common/redis/index.ts b/packages/service/common/redis/index.ts index 26065f4bc..c0973e35e 100644 --- a/packages/service/common/redis/index.ts +++ b/packages/service/common/redis/index.ts @@ -59,7 +59,7 @@ export const getAllKeysByPrefix = async (key: string) => { cursor = nextCursor; for (const k of keys) { - results.push(key.replace(FASTGPT_REDIS_PREFIX, '')); + results.push(k.replace(FASTGPT_REDIS_PREFIX, '')); } } while (cursor !== '0'); diff --git a/test/mocks/common/redis.ts b/test/mocks/common/redis.ts index 6acfd039e..c4d94ec9b 100644 --- a/test/mocks/common/redis.ts +++ b/test/mocks/common/redis.ts @@ -17,7 +17,12 @@ const createMockRedisClient = () => ({ del: vi.fn().mockResolvedValue(1), exists: vi.fn().mockResolvedValue(0), keys: vi.fn().mockResolvedValue([]), - scan: vi.fn().mockResolvedValue(['0', []]), + scan: vi.fn().mockImplementation((cursor) => { + // 模拟多次迭代的场景 + if (cursor === '0') return ['100', ['key1', 'key2']]; + if (cursor === '100') return ['0', ['key3']]; + return ['0', []]; + }), // Hash operations hget: vi.fn().mockResolvedValue(null),