杰迪斯(Jedis)表现异常,在Redis中有多个哨兵

时间:2018-12-31 13:08:26

标签: redis jedis spring-cache redis-sentinel

我正在使用 Spring 2.1.1 Redis 4.0.1 。我已经配置了两台节点计算机,其中一台使用IP:192.168.20.40进行主配置,另一台使用IP:192.168.20.55进行从属配置。我在两个系统上使用jedis(不使用spring-jedis)运行Springboot应用程序,发生了不同的情况-

@Bean
public JedisSentinelPool jedisSentinelPool() {
    Set<String> sentinels=new HashSet<>();  
    sentinels.add("192.168.20.40:26379");
    sentinels.add("192.168.20.55:26379");
    JedisSentinelPool jedisSentinelPool=new JedisSentinelPool("mymaster", sentinels);
    return jedisSentinelPool;
}
  1. 在主节点上运行应用程序(使用主数据库配置的redis)时,数据会进入缓存。
  2. 在从属节点(带有从属配置的redis)上运行应用程序时,发生了例外- (i。)我能够从哨兵池中获取jedis对象,但无法将数据存储到Redis中,但异常为“ redis.clients.jedis.exceptions.JedisDataException:READONLY您不能针对只读从属设备进行写入。” < / li>
  3. 在另一台服务器(192.168.20.33)上运行应用程序时,redis服务器托管在“ IP:192.168.20.40”和“ IP:192.168.20.55”上,那么我的应用程序无法获取jedis对象从哨兵池-

    public String addToCache(@PathVariable("cacheName") String cacheName, HttpEntity<String> httpEntity, @PathVariable("key") String key) {
    try (Jedis jedis = jedisPool.getResource();) {
        long dataToEnter = jedis.hset(cacheName.getBytes(), key.getBytes(), httpEntity.getBody().getBytes());
        if (dataToEnter == 0)
            log.info("data existed in cache {} get updated ",cacheName);
        else
            log.info("new data inserted in cache {}",cacheName);
    } catch (Exception e) {
        System.out.println(e);
    }
        return httpEntity.getBody();
    }
    

    任何输入都是可观的。

1 个答案:

答案 0 :(得分:0)

能否请您检查一下redis配置文件(redis.conf)。默认情况下,它应启用只读模式。您需要将只读模式更改为false。