You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

NestJS集成Redis集群缓存时出现MOVED错误求助

解决NestJS集成Redis集群缓存时的"MOVED"错误

问题原因

你当前的配置是按照单Redis实例编写的,但实际连接的是Redis集群。Redis集群会根据键的哈希槽将数据分配到不同节点,单实例客户端无法自动处理MOVED重定向指令,因此触发该错误。

解决方案

切换到支持Redis集群的缓存存储库,并将配置修改为集群模式:

  1. 清理重复导入
    删除仅支持单实例的cache-manager-ioredis导入,保留支持集群的cache-manager-ioredis-yet。

  2. 更新CacheModule集群配置
    替换原单实例的host/port配置,改为集群节点列表,并配置认证等必要参数。

修改后的代码

app.module.ts

import { CacheModule } from '@nestjs/cache-manager';
import { redisStore } from 'cache-manager-ioredis-yet';
import { ConfigModule } from '@nestjs/config';
import { KnexModule } from '@nestjs/knex';
// 导入其他必要模块...

@Module({
  imports: [
    ConfigModule.forRoot({
      isGlobal: true,
      envFilePath: !ENV ? '.env' : `.env.${ENV}`,
    }),
    CacheModule.register({
      isGlobal: true,
      store: redisStore,
      // Redis集群配置
      clusterConfig: {
        nodes: [
          { host: process.env.REDIS_HOST_NODE1, port: Number(process.env.REDIS_PORT_NODE1) },
          { host: process.env.REDIS_HOST_NODE2, port: Number(process.env.REDIS_PORT_NODE2) },
          // 添加所有集群节点信息
        ],
        options: {
          redisOptions: {
            password: process.env.REDIS_PASSWORD,
            enableAutoPipelining: true,
          },
        },
      },
    }),
    KnexModule.forRoot(knex_config),
  ],
  controllers: [AppController],
  providers: [
    // 你的服务提供者列表
  ],
})
export class AppModule {}

说明

  • clusterConfig.nodes:填写Redis集群所有节点的host和port,确保客户端能发现完整集群拓扑。
  • redisOptions:保留原有的认证、管道优化等参数,适配集群环境。
  • 建议在.env文件中统一配置集群节点地址,避免硬编码。

app.service.ts(无需修改)

服务层的缓存读写逻辑本身无问题,Module配置更新后即可正常工作。

内容的提问来源于stack exchange,提问作者code_optimizer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 20:41:29