|
|
@ -6,7 +6,7 @@ import { CACHE_MANAGER, Cache } from '@nestjs/cache-manager'; |
|
|
import { Inject, Injectable, Logger } from '@nestjs/common'; |
|
|
import { Inject, Injectable, Logger } from '@nestjs/common'; |
|
|
import Keyv from 'keyv'; |
|
|
import Keyv from 'keyv'; |
|
|
import ms from 'ms'; |
|
|
import ms from 'ms'; |
|
|
import { createHash } from 'node:crypto'; |
|
|
import { createHash, randomUUID } from 'node:crypto'; |
|
|
|
|
|
|
|
|
@Injectable() |
|
|
@Injectable() |
|
|
export class RedisCacheService { |
|
|
export class RedisCacheService { |
|
|
@ -75,13 +75,16 @@ export class RedisCacheService { |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
public async isHealthy() { |
|
|
public async isHealthy() { |
|
|
const testKey = '__health_check__'; |
|
|
const HEALTH_CHECK_TIMEOUT = ms('5 seconds'); |
|
|
|
|
|
|
|
|
|
|
|
const testKey = `__health_check__${randomUUID().replace(/-/g, '')}`; |
|
|
const testValue = Date.now().toString(); |
|
|
const testValue = Date.now().toString(); |
|
|
|
|
|
|
|
|
try { |
|
|
try { |
|
|
await Promise.race([ |
|
|
await Promise.race([ |
|
|
(async () => { |
|
|
(async () => { |
|
|
await this.set(testKey, testValue, ms('1 second')); |
|
|
await this.set(testKey, testValue, HEALTH_CHECK_TIMEOUT); |
|
|
|
|
|
|
|
|
const result = await this.get(testKey); |
|
|
const result = await this.get(testKey); |
|
|
|
|
|
|
|
|
if (result !== testValue) { |
|
|
if (result !== testValue) { |
|
|
@ -91,7 +94,7 @@ export class RedisCacheService { |
|
|
new Promise((_, reject) => |
|
|
new Promise((_, reject) => |
|
|
setTimeout( |
|
|
setTimeout( |
|
|
() => reject(new Error('Redis health check failed: timeout')), |
|
|
() => reject(new Error('Redis health check failed: timeout')), |
|
|
ms('2 seconds') |
|
|
HEALTH_CHECK_TIMEOUT |
|
|
) |
|
|
) |
|
|
) |
|
|
) |
|
|
]); |
|
|
]); |
|
|
|