如何解决仅Redis主实例可以处理所有读写,而从属只能用于故障转移吗?
我的工作系统由Spring Web应用程序组成,它使用Redis作为事务计数器,并有条件地阻止事务请求。
交易如下:
- 检查数据是否存在。 (HGET)
- 如果没有,则保存新的1(计数为0)并设置到期时间。 (HSET,EXPIRE)
- 增加计数值。 (INCRBY)
- 如果增加的计数值达到特定的配置限制,则会将交易设置为“已阻止”(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上的实际操作
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。