java使用来自多个app实例的redis

时间:2014-03-27 13:25:31

标签: java spring redis jedis

我的目标是从几个应用程序实例(读写访问)处理Redis服务器的一般实例。我需要它在几个Web应用程序服务器之间共享Web会话ID和会话元信息。

当只有一个Web应用程序实例启动时,一切正常,但是当第二个实例初始化时,db被刷新,因此第一个应用程序插入的数据消失了。我尝试了两种连接建立方式:
带弹簧

ApplicationContext context = new ClassPathXmlApplicationContext(
            config.getString(Constants.REDIS_CONFIG_FILE));
    this.redisTemplate = (RedisTemplate) context.getBean("redisTemplate");

<bean id="jedisConnectionFactory"
      class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory"
      p:use-pool="true" p:host-name="${oiosaml-sp.sessionhandler.redis.url}"
      p:port="${oiosaml-sp.sessionhandler.redis.port}"/>

<!-- redis template definition -->
<bean id="redisTemplate"
      class="org.springframework.data.redis.core.RedisTemplate"
      p:connection-factory-ref="jedisConnectionFactory"/>

和jedis

    String redisUrl = config.getString(Constants.REDIS_URL);
    String redisPort = config.getString(Constants.REDIS_PORT);
    if (redisUrl == null || redisPort == null) {
        throw new IllegalArgumentException(
                PROPERTY_IS_NOT_SET_ERROR_MESSAGE);
    }
    JedisPoolConfig poolConfig = new JedisPoolConfig();
    poolConfig.setMaxTotal(MAX_CONNECTION_AMOUNT);
    this.pool = new JedisPool(poolConfig, redisUrl,
            Integer.parseInt(redisPort));

但是在这两种变体中我都有同样的问题,即在建立第二个app实例的连接时刷新db。看起来redis-server在这种情况下无法正常工作。我做错了什么?

1 个答案:

答案 0 :(得分:0)

我没有使用spring redis模板,但是你的jedis代码不可能导致这个问题。 redis-server也不可能刷新db auto。 唯一可能的原因是你的代码冲洗db特殊镇静。 请尝试重新启动您的第一个应用实例,看看发生了什么。