仅Redis主实例可以处理所有读写,而从属只能用于故障转移吗?

问题描述

我的工作系统由Spring Web应用程序组成,它使用Redis作为事务计数器,并有条件地阻止事务请求。

交易如下:

  1. 检查数据是否存在。 (HGET)
  2. 如果没有,则保存新的1(计数为0)并设置到期时间。 (HSET,EXPIRE)
  3. 增加计数值。 (INCRBY)
  4. 如果增加的计数值达到特定的配置限制,则会将交易设置为“已阻止”(HSET)

极限值是我公司的业务政策。

立即立即要求这种读取和写入操作。 目前,我在一台机器上使用一个Redis实例。 (仅主服务器,无复制。) 我想获得Redis HA,所以我需要从属实例,但同时,由于从属数据请求延迟,我希望对Redis进行所有读写操作只是为了掌握主实例。

经过研究,我发现拥有一个代理服务器来使用Redis HA是一个好主意。但是,对于代理来说,似乎仅使用主实例来接收请求而使用从实例来进行故障转移似乎是不可能的。 有可能吗?

谢谢。

解决方法

您需要的是Redis Sentinel

使用Redis Sentinel,您可以从哨兵那里获取主地址,并用主地址进行读写。如果主服务器宕机,Redis Sentinel将进行故障转移,并选择一个新的主服务器。然后,您可以从哨兵那里获取新主人的地址。

,

在使用Lettuce for Redis群集驱动程序时,应将读取首选项设置为Master,并且一切正常,示例代码可能如下所示。

    LettuceClientConfiguration lettuceClientConfiguration =
        LettuceClientConfiguration.builder().readFrom(ReadFrom.MASTER).build();

    RedisClusterConfiguration redisClusterConfiguration = new RedisClusterConfiguration();
    List<RedisNode> redisNodes = new ArrayList<>();
    redisNodes.add(new RedisNode("127.0.0.1",9000));
    redisNodes.add(new RedisNode("127.0.0.1",9001));
    redisNodes.add(new RedisNode("127.0.0.1",9002));
    redisNodes.add(new RedisNode("127.0.0.1",9003));
    redisNodes.add(new RedisNode("127.0.0.1",9004));
    redisNodes.add(new RedisNode("127.0.0.1",9005));
    redisClusterConfiguration.setClusterNodes(redisNodes);
    LettuceConnectionFactory lettuceConnectionFactory =
        new LettuceConnectionFactory(redisClusterConfiguration,lettuceClientConfiguration);
    lettuceConnectionFactory.afterPropertiesSet();

查看Redis Cluster Configuration上的实际操作

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...