diff --git a/backend/services/blockchain-service/src/application/services/deposit-detection.service.ts b/backend/services/blockchain-service/src/application/services/deposit-detection.service.ts index 9417faaf..7fa7b05f 100644 --- a/backend/services/blockchain-service/src/application/services/deposit-detection.service.ts +++ b/backend/services/blockchain-service/src/application/services/deposit-detection.service.ts @@ -94,6 +94,15 @@ export class DepositDetectionService implements OnModuleInit { * 扫描单条链 */ private async scanChain(chainType: ChainType): Promise { + // 检查缓存是否为空,如果为空则自动从数据库重新加载 + const cacheCount = await this.addressCache.getCount(chainType); + if (cacheCount === 0) { + this.logger.warn(`Address cache empty for ${chainType}, reloading from database...`); + const addresses = await this.monitoredAddressRepo.getAllActiveAddresses(chainType); + await this.addressCache.reloadCache(chainType, addresses); + this.logger.log(`Reloaded ${addresses.length} addresses for ${chainType} into cache`); + } + // 获取上次扫描位置 let lastBlock = await this.checkpointRepo.getLastScannedBlock(chainType); diff --git a/backend/services/blockchain-service/src/infrastructure/redis/address-cache.service.ts b/backend/services/blockchain-service/src/infrastructure/redis/address-cache.service.ts index ef9386c8..d2d7dccd 100644 --- a/backend/services/blockchain-service/src/infrastructure/redis/address-cache.service.ts +++ b/backend/services/blockchain-service/src/infrastructure/redis/address-cache.service.ts @@ -66,6 +66,15 @@ export class AddressCacheService implements OnModuleInit { return this.redis.smembers(key); } + /** + * 获取监控地址数量 + */ + async getCount(chainType: ChainType): Promise { + const key = this.getCacheKey(chainType); + const client = this.redis.getClient(); + return client.scard(key); + } + /** * 重新加载缓存(从数据库) */