reidsクラスタ学習(二)jedisを用いてredisクラスタクライアントを実現する


前節ではredisの公式クラスタを構築する方法を記録しましたが、jedisでクラスタ環境下のクライアントを実現する方法について説明し始めました.Jedisでクラスタを実現するクライアントクラスはredisである.clients.jedis.JedisCluster、中にはいくつかの構造方法があります.前節で私たちが構築したクラスタ環境にはパスワードがあるので、私はこの構造方法を使いました.
public JedisCluster(Set jedisClusterNode, int connectionTimeout, int soTimeout,
                      int maxAttempts, String password, final GenericObjectPoolConfig poolConfig) {
    super(jedisClusterNode, connectionTimeout, soTimeout, maxAttempts, password, poolConfig);
  }

次はspringの構成です
 <context:property-placeholder location="classpath:redisConfig.properties" />

    <bean id="poolConfig" class="redis.clients.jedis.JedisPoolConfig" >
        
        <property name="maxIdle" value="${redis.maxIdle}" />
        
        <property name="maxTotal" value="${redis.maxTotal}" />
        
        <property name="maxWaitMillis" value="${redis.maxWaitMillis}" />
        
        <property name="minEvictableIdleTimeMillis" value="${redis.minEvictableIdleTimeMillis}" />
        
        <property name="numTestsPerEvictionRun" value="${redis.numTestsPerEvictionRun}" />
        
        <property name="timeBetweenEvictionRunsMillis" value="${redis.timeBetweenEvictionRunsMillis}" />
        
        <property name="testOnBorrow" value="${redis.testOnBorrow}" />
        
        <property name="testWhileIdle" value="${redis.testWhileIdle}" />
    bean>

    <bean id="jedisCluster" class="redis.clients.jedis.JedisCluster">
        
        
        <constructor-arg index="0">
            <set>
                <bean class="redis.clients.jedis.HostAndPort">
                    <constructor-arg index="0" value="10.2.72.115" />
                    <constructor-arg index="1" value="7000" />
                bean>
                <bean class="redis.clients.jedis.HostAndPort">
                    <constructor-arg index="0" value="10.2.72.115" />
                    <constructor-arg index="1" value="7001" />
                bean>
                <bean class="redis.clients.jedis.HostAndPort">
                    <constructor-arg index="0" value="10.2.72.115" />
                    <constructor-arg index="1" value="7002" />
                bean>
                <bean class="redis.clients.jedis.HostAndPort">
                    <constructor-arg index="0" value="10.2.72.115" />
                    <constructor-arg index="1" value="7003" />
                bean>
                <bean class="redis.clients.jedis.HostAndPort">
                    <constructor-arg index="0" value="10.2.72.115" />
                    <constructor-arg index="1" value="7004" />
                bean>
                <bean class="redis.clients.jedis.HostAndPort">
                    <constructor-arg index="0" value="10.2.72.115" />
                    <constructor-arg index="1" value="7005" />
                bean>
            set>
        constructor-arg>
        <constructor-arg index="1" value="5000" />
        <constructor-arg index="2" value="5000" />
        <constructor-arg index="3" value="2" />
        <constructor-arg index="4" value="root" />
        <constructor-arg index="5" ref="poolConfig" />
    bean>

テストコードです
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration({"classpath:spring-cache.xml"})
public class RedisTest {
    @Autowired
    JedisCluster jedisCluster;

    @Test
    public void testJedisCluster() {
        System.out.println(jedisCluster.set("test", "test"));
        System.out.println(jedisCluster.get("test"));
        System.out.println(jedisCluster.get("name"));
        System.out.println(jedisCluster.get("age"));
        System.out.println(jedisCluster.get("haha"));
        System.out.println(jedisCluster.get("haha"));
    }
}

注意:私のjedisバージョンは2.9.0で、springは4.2.5です.RELEASE
具体的なコードは私のgithubにredis-cluster-demoを表示することができます