From 83384acdacc5a52d4e5b1fefb07097c02dc208b7 Mon Sep 17 00:00:00 2001 From: hailin Date: Fri, 30 Jan 2026 02:22:20 -0800 Subject: [PATCH] =?UTF-8?q?fix(mining-service):=20Redis=20DB=2011=20?= =?UTF-8?q?=E5=86=B2=E7=AA=81=E4=BF=AE=E5=A4=8D=EF=BC=8C=E8=BF=81=E7=A7=BB?= =?UTF-8?q?=E8=87=B3=20DB=2016?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 问题: mining-service (2.0) 与 blockchain-service (1.0) 共用 Redis DB 11, 存在数据污染和资源抢占风险。虽然当前 Key 前缀不同 (mining:* vs blockchain:*),但缺乏结构性隔离保障。 方案: - 将 mining-service Redis DB 从 11 迁移到 16 (超出默认 0-15 范围) - Redis 基础设施配置增加 --databases 20,支持 DB 16+ - 同步修正 .env.example 与代码默认值不一致的问题 (原 .env=1, 代码=11) 修改清单: - mining-service/infrastructure.module.ts: 代码默认值 11 → 16 - mining-service/redis.service.ts: fallback 默认值 1 → 16 - mining-service/.env.example: REDIS_DB=1 → REDIS_DB=16 - docker-compose.2.0.yml: mining-service REDIS_DB 11 → 16 + 注释 - docker-compose.yml: Redis 添加 --databases 20 - docker-compose.infra.yml: Redis 添加 --databases 20 - docker-compose.windows.yml: Redis 添加 --databases 20 部署注意: 1. 需重启 Redis 容器使 --databases 20 生效 2. 需重启 mining-service 使新 DB 16 生效 3. 旧 DB 11 中 mining-service 的残留数据可手动清理: redis-cli -n 11 KEYS "mining:*" | xargs redis-cli -n 11 DEL Redis DB 分配表 (修改后): 1.0: DB 0-11 (identity=0, wallet=1, ..., blockchain=11) 2.0: DB 8,10,12-16 (blockchain=8, contribution=10, trading=12, admin=13, auth=14, wallet=15, mining=16) Co-Authored-By: Claude Opus 4.5 --- backend/docker-compose.windows.yml | 1 + backend/services/docker-compose.2.0.yml | 6 +++--- backend/services/docker-compose.infra.yml | 1 + backend/services/docker-compose.yml | 2 +- backend/services/mining-service/.env.example | 2 +- .../src/infrastructure/infrastructure.module.ts | 2 +- .../src/infrastructure/redis/redis.service.ts | 2 +- 7 files changed, 9 insertions(+), 7 deletions(-) diff --git a/backend/docker-compose.windows.yml b/backend/docker-compose.windows.yml index 7c1f11a3..ed14038b 100644 --- a/backend/docker-compose.windows.yml +++ b/backend/docker-compose.windows.yml @@ -46,6 +46,7 @@ services: redis: image: redis:7-alpine container_name: rwa-redis + command: redis-server --databases 20 ports: - "6379:6379" healthcheck: diff --git a/backend/services/docker-compose.2.0.yml b/backend/services/docker-compose.2.0.yml index 8632dbf5..27d94a94 100644 --- a/backend/services/docker-compose.2.0.yml +++ b/backend/services/docker-compose.2.0.yml @@ -4,7 +4,7 @@ # # 2.0 系统共享 1.0 的基础设施 (PostgreSQL, Redis, Kafka),但完全隔离: # - 数据库:使用独立的数据库名称 (rwa_contribution, rwa_mining, etc.) -# - Redis:使用独立的 DB 分区 (DB 10-15) +# - Redis:使用独立的 DB 分区 (DB 8,10,12-16),避免与 1.0 服务 (DB 0-11) 冲突 # - Kafka:仅通过 CDC 消费 1.0 的数据变更事件,单向同步 # - HTTP:2.0 服务之间互相调用,不调用 1.0 服务 # @@ -69,11 +69,11 @@ services: PORT: 3021 # PostgreSQL - 使用独立的数据库 DATABASE_URL: postgresql://${POSTGRES_USER:-postgres}:${POSTGRES_PASSWORD:-postgres}@postgres:5432/rwa_mining?schema=public - # Redis - 使用 DB 11 隔离 + # Redis - 使用 DB 16 隔离 (避免与 1.0 blockchain-service 的 DB 11 冲突) REDIS_HOST: redis REDIS_PORT: 6379 REDIS_PASSWORD: ${REDIS_PASSWORD:-} - REDIS_DB: 11 + REDIS_DB: 16 # Kafka KAFKA_BROKERS: kafka:29092 # JWT 配置 (与 auth-service 共享密钥以验证 token) diff --git a/backend/services/docker-compose.infra.yml b/backend/services/docker-compose.infra.yml index 2d9511fc..4e6950d5 100644 --- a/backend/services/docker-compose.infra.yml +++ b/backend/services/docker-compose.infra.yml @@ -36,6 +36,7 @@ services: redis: image: redis:7-alpine container_name: rwa-redis + command: redis-server --appendonly yes --databases 20 ports: - "6379:6379" volumes: diff --git a/backend/services/docker-compose.yml b/backend/services/docker-compose.yml index 50fc85b6..b47d6016 100644 --- a/backend/services/docker-compose.yml +++ b/backend/services/docker-compose.yml @@ -52,7 +52,7 @@ services: container_name: rwa-redis environment: TZ: Asia/Shanghai - command: redis-server --appendonly yes ${REDIS_PASSWORD:+--requirepass $REDIS_PASSWORD} + command: redis-server --appendonly yes --databases 20 ${REDIS_PASSWORD:+--requirepass $REDIS_PASSWORD} ports: - "6379:6379" volumes: diff --git a/backend/services/mining-service/.env.example b/backend/services/mining-service/.env.example index 16ef4ea5..ab1b8437 100644 --- a/backend/services/mining-service/.env.example +++ b/backend/services/mining-service/.env.example @@ -10,7 +10,7 @@ DATABASE_URL=postgresql://postgres:password@localhost:5432/mining_db?schema=publ REDIS_HOST=localhost REDIS_PORT=6379 REDIS_PASSWORD= -REDIS_DB=1 +REDIS_DB=16 # Kafka KAFKA_BROKERS=localhost:9092 diff --git a/backend/services/mining-service/src/infrastructure/infrastructure.module.ts b/backend/services/mining-service/src/infrastructure/infrastructure.module.ts index 2c121f80..f030581d 100644 --- a/backend/services/mining-service/src/infrastructure/infrastructure.module.ts +++ b/backend/services/mining-service/src/infrastructure/infrastructure.module.ts @@ -49,7 +49,7 @@ import { KafkaProducerService } from './kafka/kafka-producer.service'; host: configService.get('REDIS_HOST', 'localhost'), port: configService.get('REDIS_PORT', 6379), password: configService.get('REDIS_PASSWORD'), - db: configService.get('REDIS_DB', 11), + db: configService.get('REDIS_DB', 16), }), inject: [ConfigService], }, diff --git a/backend/services/mining-service/src/infrastructure/redis/redis.service.ts b/backend/services/mining-service/src/infrastructure/redis/redis.service.ts index 1331db79..faa4cfe5 100644 --- a/backend/services/mining-service/src/infrastructure/redis/redis.service.ts +++ b/backend/services/mining-service/src/infrastructure/redis/redis.service.ts @@ -20,7 +20,7 @@ export class RedisService implements OnModuleInit, OnModuleDestroy { host: this.options.host, port: this.options.port, password: this.options.password, - db: this.options.db ?? 1, + db: this.options.db ?? 16, retryStrategy: (times) => Math.min(times * 50, 2000), });