有没有可能只有 Redis master 实例处理所有的读写,而 slaves 只用于故障转移?
It is possible for only the Redis master instances to handle all reads and writes, and for the slaves to be used only for failover?
我的工作系统由 Spring 个 Web 应用程序组成,它使用 Redis 作为事务计数器并有条件地阻止事务请求。
交易如下:
- 检查数据是否存在。 (HGET)
- 如果没有,则保存新的计数为 0 并设置过期时间。 (HSET, 过期)
- 增加计数值。 (INCRBY)
- 如果增加的计数值达到特定的配置限制,它将事务设置为 'blocked' (HSET)
限值是我公司的经营方针。
这样的读写操作,一个接一个,立即请求。
目前,我在一台机器上使用一个 Redis 实例。 (只有主人,没有复制品。)
我想获得 Redis HA,所以我需要从属实例,但与此同时,由于从属数据复制延迟,我希望将所有对 Redis 的读取和写入操作仅提供给主实例。
经过一些研究,我发现有一个代理服务器来使用 Redis HA 是个好主意。然而,使用代理,似乎不可能只使用主实例来接收请求,而从属实例只用于故障转移。
可能吗??
提前致谢。
当您要使用 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 Sentinel.
使用Redis Sentinel,可以从sentinel获取master地址,read/write使用master。如果 master 宕机,Redis Sentinel 将进行故障转移,并选出一个新的 master。然后就可以从sentinel获取新master的地址了
我的工作系统由 Spring 个 Web 应用程序组成,它使用 Redis 作为事务计数器并有条件地阻止事务请求。
交易如下:
- 检查数据是否存在。 (HGET)
- 如果没有,则保存新的计数为 0 并设置过期时间。 (HSET, 过期)
- 增加计数值。 (INCRBY)
- 如果增加的计数值达到特定的配置限制,它将事务设置为 'blocked' (HSET)
限值是我公司的经营方针。
这样的读写操作,一个接一个,立即请求。 目前,我在一台机器上使用一个 Redis 实例。 (只有主人,没有复制品。) 我想获得 Redis HA,所以我需要从属实例,但与此同时,由于从属数据复制延迟,我希望将所有对 Redis 的读取和写入操作仅提供给主实例。
经过一些研究,我发现有一个代理服务器来使用 Redis HA 是个好主意。然而,使用代理,似乎不可能只使用主实例来接收请求,而从属实例只用于故障转移。 可能吗??
提前致谢。
当您要使用 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 Sentinel.
使用Redis Sentinel,可以从sentinel获取master地址,read/write使用master。如果 master 宕机,Redis Sentinel 将进行故障转移,并选出一个新的 master。然后就可以从sentinel获取新master的地址了