From fc1c605b9eba028f3e5382e16fb5a8610d5b8be5 Mon Sep 17 00:00:00 2001 From: Mark Nachazel Date: Wed, 12 Mar 2025 16:47:52 -0400 Subject: [PATCH] accept client config for clustered redis Signed-off-by: Mark Nachazel --- .../entrypoints/cache/CacheManager.test.ts | 53 +++++++++++++++++++ .../src/entrypoints/cache/CacheManager.ts | 8 +-- 2 files changed, 57 insertions(+), 4 deletions(-) diff --git a/packages/backend-defaults/src/entrypoints/cache/CacheManager.test.ts b/packages/backend-defaults/src/entrypoints/cache/CacheManager.test.ts index 82e4b03d56..fc7ed34fc4 100644 --- a/packages/backend-defaults/src/entrypoints/cache/CacheManager.test.ts +++ b/packages/backend-defaults/src/entrypoints/cache/CacheManager.test.ts @@ -264,4 +264,57 @@ describe('CacheManager store options', () => { defaults: undefined, }); }); + + it('respects client config for non-clustered mode', () => { + const manager = CacheManager.fromConfig( + mockServices.rootConfig({ + data: { + backend: { + cache: { + store: 'redis', + connection: 'redis://localhost:6379', + redis: { + client: { + keyPrefixSeparator: '!', + }, + }, + }, + }, + }, + }), + ); + manager.forPlugin('p1'); + + expect(KeyvRedis).toHaveBeenCalledWith('redis://localhost:6379', { + keyPrefixSeparator: '!', + }); + }); + + it('accepts client config for clustered mode', () => { + const manager = CacheManager.fromConfig( + mockServices.rootConfig({ + data: { + backend: { + cache: { + store: 'redis', + connection: 'redis://localhost:6379', + redis: { + client: { + keyPrefixSeparator: '!', + }, + cluster: { + rootNodes: [{ url: 'redis://localhost:6379' }], + }, + }, + }, + }, + }, + }), + ); + manager.forPlugin('p1'); + + expect(KeyvRedis).toHaveBeenCalledWith(expect.anything(), { + keyPrefixSeparator: '!', + }); + }); }); diff --git a/packages/backend-defaults/src/entrypoints/cache/CacheManager.ts b/packages/backend-defaults/src/entrypoints/cache/CacheManager.ts index 8c0afae826..e4f0f5f408 100644 --- a/packages/backend-defaults/src/entrypoints/cache/CacheManager.ts +++ b/packages/backend-defaults/src/entrypoints/cache/CacheManager.ts @@ -211,15 +211,15 @@ export class CacheManager { return (pluginId, defaultTtl) => { if (!stores[pluginId]) { + const redisOptions = this.storeOptions?.client || { + keyPrefixSeparator: ':', + }; if (this.storeOptions?.cluster) { // Create a Redis cluster const cluster = createCluster(this.storeOptions?.cluster); - stores[pluginId] = new KeyvRedis(cluster); + stores[pluginId] = new KeyvRedis(cluster, redisOptions); } else { // Create a regular Redis connection - const redisOptions = this.storeOptions?.client || { - keyPrefixSeparator: ':', - }; stores[pluginId] = new KeyvRedis(this.connection, redisOptions); }