haproxy—只有redis主示例可以处理所有读写操作,而从示例只能用于故障转移?

ffdz8vbo  于 2021-06-08  发布在  Redis
关注(0)|答案(2)|浏览(275)

我的工作系统由springweb应用程序组成,它使用redis作为事务计数器,并有条件地阻止事务请求。
交易情况如下:
检查数据是否存在(hget公司)
如果没有,则使用计数0保存新的,并设置过期时间(hset,过期)
增加计数值(增量)
如果增加的计数值达到特定的配置限制,它会将事务设置为“阻塞”(hset)
限值是我公司的经营方针。
这样的读写操作被一个接一个地立即请求。目前,我在一台机器上使用一个redis示例(我想得到redis ha,所以我需要从设备,但同时,我想所有读写redis的操作都只对主设备,因为从设备的数据释放延迟。
经过一些研究,我发现使用redis-ha的代理服务器是一个好主意。但是,使用代理,似乎不可能只使用主示例来接收请求,而只使用从示例来进行故障转移。有可能吗??
提前谢谢。

hrysbysz

hrysbysz1#

你需要的是redis sentinel。
使用redis sentinel,您可以从sentinel获取主地址,并使用主地址进行读/写。如果主机关闭,redis sentinel将进行故障转移,并选择一个新的主机。然后你可以从哨兵那里得到新主人的地址。

azpvetkf

azpvetkf2#

当您将要使用莴苣作为redis集群驱动程序时,您应该将readpreference设置为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群集配置中的操作

相关问题