redis 使用一段时间后,变成了只读副本

来源:15-5 项目部署:使用docker进行部署

qq_慕田峪3144384

2023-04-09

问题:为什么我的 redis 使用过一段时间后就报错了:Redis Connection error: ReplyError: READONLY You can’t write against ,重启 redis 后就好了

redis 配置:

docker-compose.yml

# Use root/example as user/password credentials
version: '3.1'
  ...
  redis:
    image: redis
    restart: always
    ports:
      - 6379:6379

app.module.ts

@Global()
@Module({
  imports: [
    RedisModule.forRootAsync({
      useFactory: (configService: ConfigService, logger: LoggerService) => {
        const host = configService.get(ConfigEnum.REDIS_HOST);
        const port = configService.get(ConfigEnum.REDIS_PORT);
        const password = configService.get(ConfigEnum.REDIS_PASSWORD);
        const url = password ? `redis://${password}@${host}:${port}` : `redis://${host}:${port}`;
        return {
          config: {
            url,
            reconnectOnError: err => {
              logger.error(`Redis Connection error: ${err}`, url);
              return true;
            },
          },
        };
      },
    }),
  ],
 
})
export class AppModule {}

用法:

await this.redis.set(`${to}_code`, code, 'EX', 60 * 30);

gpt 回答:

当您遇到 “Redis Connection error: ReplyError: READONLY You can’t write against” 错误时,这意味着您的 Redis 客户端正在尝试写入一个只读的 Redis 实例。这通常发生在您连接到的 Redis 实例是主实例的只读副本时。在某些情况下,这可能是因为您的 Redis 客户端配置了负载均衡,而某个节点被标记为只读。
重启 Redis 服务可能会临时解决问题,因为在重启后,所有的副本将重新连接到主实例。但是,如果配置不当或者负载均衡策略导致的问题,重启可能并非长久之计。
要解决这个问题,您可以:
确保您的客户端连接到正确的 Redis 实例。如果您只有一个 Redis 实例,那么确保客户端连接到这个实例。如果您使用的是 Redis 集群,确保客户端连接到主实例而不是只读副本。
检查您的客户端是否配置了正确的负载均衡策略。在某些情况下,负载均衡策略可能导致客户端将写入操作路由到只读副本。确保您的负载均衡策略不会将写入操作路由到只读副本。
如果您使用的是 Redis Sentinel,确保 Sentinel 正确配置并监控主实例。Sentinel 可能会在主实例出现故障时提升一个副本为新的主实例。确保 Sentinel 正确地检测到主实例并将其标记为主实例。
通过审查和修改您的配置,您应该能够解决这个问题并避免在将来重新出现。

写回答

1回答

Brian

2023-04-11

高端,小伙伴GPT中得可以啊,这个提示是比较奇怪,你有没有修改过redis的配置?

可以考虑重新创建一个redis实例,docker-compose down && docker-compose up -d


根据你提供的信息,我也查询了一下,这个报错是由于redis把自己当成了slave,如果redis是master则不会有这个问题,可以在 Redis 命令行中执行 SLAVEOF NO ONE 命令来将 Redis 实例设置为主节点

0
2
Brian
回复
qq_慕田峪3144384
。。。。注意服务器安全
2023-05-09
共2条回复

NestJS 入门到实战 前端必学服务端新趋势

近几年快速发展的Node.js框架,掌握未来前端工程师后端开发能力

569 学习 · 238 问题

查看课程