From ce9ad7e623af01a29c92ac6a61457e469189803a Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Sun, 8 Jun 2025 17:13:26 +0200 Subject: [PATCH] Improve implementation of isHealthy() --- .../app/redis-cache/redis-cache.service.ts | 20 +++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/apps/api/src/app/redis-cache/redis-cache.service.ts b/apps/api/src/app/redis-cache/redis-cache.service.ts index e6e98d622..ae4493e51 100644 --- a/apps/api/src/app/redis-cache/redis-cache.service.ts +++ b/apps/api/src/app/redis-cache/redis-cache.service.ts @@ -79,12 +79,22 @@ export class RedisCacheService { } public async isHealthy() { + const testKey = '__health_check__'; + const testValue = Date.now().toString(); + try { await Promise.race([ - this.getKeys(), + (async () => { + await this.set(testKey, testValue, ms('1 second')); + const result = await this.get(testKey); + + if (result !== testValue) { + throw new Error('Redis health check failed: value mismatch'); + } + })(), new Promise((_, reject) => setTimeout( - () => reject(new Error('Redis health check timeout')), + () => reject(new Error('Redis health check failed: timeout')), ms('2 seconds') ) ) @@ -92,7 +102,13 @@ export class RedisCacheService { return true; } catch (error) { + Logger.error(error?.message, 'RedisCacheService'); + return false; + } finally { + try { + await this.remove(testKey); + } catch {} } }