Redis客戶端之Jedis

目前Redis大概有3中基於Java語言的Client:

Jedis是官方提供的唯一Redis Client For Java Provider。

  1. <dependency>  
  2.             <groupId>redis.clients</groupId>  
  3.             <artifactId>jedis</artifactId>  
  4.             <version>2.6.2</version>  
  5.         </dependency>  
<dependency>
            <groupId>redis.clients</groupId>
            <artifactId>jedis</artifactId>
            <version>2.6.2</version>
        </dependency>

一、Jedis簡單使用

  1. package cn.slimsmart.redis.demo.jedis;  
  2.   
  3. import java.util.HashMap;  
  4. import java.util.List;  
  5. import java.util.Map;  
  6. import java.util.Set;  
  7.   
  8. import redis.clients.jedis.Jedis;  
  9.   
  10. @SuppressWarnings(“resource”)  
  11. public class JedisTest {  
  12.     private static final String HASH_KEY = “key”;  
  13.   
  14.     public static void main(String[] args) {  
  15.         Jedis jedis = new Jedis(“192.168.36.189”6379);  
  16.         /** 
  17.          * 存儲String key-value 
  18.          */  
  19.         jedis.set(HASH_KEY, ”value”);  
  20.         /** 
  21.          * 如果已經存在key了,先刪除掉 
  22.          */  
  23.         if (jedis.exists(HASH_KEY)) {  
  24.             System.out.println(jedis.get(HASH_KEY));  
  25.             jedis.del(HASH_KEY);  
  26.         }  
  27.   
  28.         /** 
  29.          * 存入單個key-value 
  30.          */  
  31.         jedis.hset(HASH_KEY, ”username”“yourUsername”);  
  32.   
  33.         /** 
  34.          * 存入多個key-value鍵值對 
  35.          */  
  36.         Map<String, String> keyValueMap = new HashMap<String, String>();  
  37.         keyValueMap.put(”password”“YourPassword”);  
  38.         keyValueMap.put(”age”“20”);  
  39.         jedis.hmset(HASH_KEY, keyValueMap);  
  40.   
  41.         /** 
  42.          * 判斷某個key是否在指定的Hash key中 
  43.          */  
  44.         boolean existsUsernameKey = jedis.hexists(HASH_KEY, “username”);  
  45.         // true  
  46.         System.out.println(existsUsernameKey);  
  47.   
  48.         /** 
  49.          * 獲取某個hash中鍵值對的數量 
  50.          */  
  51.         Long len = jedis.hlen(HASH_KEY);  
  52.         // 3  
  53.         System.out.println(len);  
  54.   
  55.         /** 
  56.          * 獲取一個hash中的所有key 
  57.          */  
  58.         Set<String> keys = jedis.hkeys(HASH_KEY);  
  59.         // [password, username, age]  
  60.         System.out.println(keys);  
  61.   
  62.         /** 
  63.          * 獲取一個hash中的所有values 
  64.          */  
  65.         List<String> values = jedis.hvals(HASH_KEY);  
  66.         // [yourUsername, YourPassword, 20]  
  67.         System.out.println(values);  
  68.   
  69.         /** 
  70.          * 獲取指定hash的所有的鍵值對 
  71.          */  
  72.         Map<String, String> allKVMap = jedis.hgetAll(HASH_KEY);  
  73.         // {username=yourUsername, age=20, password=YourPassword}  
  74.         System.out.println(allKVMap);  
  75.   
  76.         /** 
  77.          * 從一個hash中獲取某個field的值 
  78.          */  
  79.         String value = jedis.hget(HASH_KEY, ”username”);  
  80.         // yourUsername  
  81.         System.out.println(value);  
  82.   
  83.         List<String> multValues = jedis.hmget(HASH_KEY, ”username”“password”);  
  84.         // [yourUsername, YourPassword]  
  85.         System.out.println(multValues);  
  86.     }  
  87.   
  88. }  
package cn.slimsmart.redis.demo.jedis;

import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;

import redis.clients.jedis.Jedis;

@SuppressWarnings("resource")
public class JedisTest {
    private static final String HASH_KEY = "key";

    public static void main(String[] args) {
        Jedis jedis = new Jedis("192.168.36.189", 6379);
        /**
         * 存儲String key-value
         */
        jedis.set(HASH_KEY, "value");
        /**
         * 如果已經存在key了,先刪除掉
         */
        if (jedis.exists(HASH_KEY)) {
            System.out.println(jedis.get(HASH_KEY));
            jedis.del(HASH_KEY);
        }

        /**
         * 存入單個key-value
         */
        jedis.hset(HASH_KEY, "username", "yourUsername");

        /**
         * 存入多個key-value鍵值對
         */
        Map<String, String> keyValueMap = new HashMap<String, String>();
        keyValueMap.put("password", "YourPassword");
        keyValueMap.put("age", "20");
        jedis.hmset(HASH_KEY, keyValueMap);

        /**
         * 判斷某個key是否在指定的Hash key中
         */
        boolean existsUsernameKey = jedis.hexists(HASH_KEY, "username");
        // true
        System.out.println(existsUsernameKey);

        /**
         * 獲取某個hash中鍵值對的數量
         */
        Long len = jedis.hlen(HASH_KEY);
        // 3
        System.out.println(len);

        /**
         * 獲取一個hash中的所有key
         */
        Set<String> keys = jedis.hkeys(HASH_KEY);
        // [password, username, age]
        System.out.println(keys);

        /**
         * 獲取一個hash中的所有values
         */
        List<String> values = jedis.hvals(HASH_KEY);
        // [yourUsername, YourPassword, 20]
        System.out.println(values);

        /**
         * 獲取指定hash的所有的鍵值對
         */
        Map<String, String> allKVMap = jedis.hgetAll(HASH_KEY);
        // {username=yourUsername, age=20, password=YourPassword}
        System.out.println(allKVMap);

        /**
         * 從一個hash中獲取某個field的值
         */
        String value = jedis.hget(HASH_KEY, "username");
        // yourUsername
        System.out.println(value);

        List<String> multValues = jedis.hmget(HASH_KEY, "username", "password");
        // [yourUsername, YourPassword]
        System.out.println(multValues);
    }

}
二、連接池的使用

Jedis使用commons-pool完成池化實現。
1.配置文件redis.properties

  1. redis.pool.maxTotal=10  
  2. redis.pool.minIdle=2  
  3. redis.pool.maxIdle=10  
  4. redis.pool.maxWait=1000  
  5. redis.pool.testWhileIdle=true  
  6. redis.pool.testOnBorrow=true  
  7. redis.pool.testOnReturn=true  
  8. #IP  
  9. redis.ip=192.168.36.189  
  10. #Port  
  11. redis.port=6379  
redis.pool.maxTotal=10
redis.pool.minIdle=2
redis.pool.maxIdle=10
redis.pool.maxWait=1000
redis.pool.testWhileIdle=true
redis.pool.testOnBorrow=true
redis.pool.testOnReturn=true




IP

redis.ip=192.168.36.189

Port

redis.port=63792.實例代碼

  1. package cn.slimsmart.redis.demo.jedis;  
  2.   
  3. import java.util.ResourceBundle;  
  4.   
  5. import redis.clients.jedis.Jedis;  
  6. import redis.clients.jedis.JedisPool;  
  7. import redis.clients.jedis.JedisPoolConfig;  
  8.   
  9. public class JedisPoolTest {  
  10.     public static void main(String[] args) {  
  11.         ResourceBundle bundle = ResourceBundle.getBundle(”redis”);  
  12.         if (bundle == null) {  
  13.             throw new IllegalArgumentException(“[redis.properties] is not found!”);  
  14.         }  
  15.         JedisPoolConfig config = new JedisPoolConfig();  
  16.         config.setMaxTotal(Integer.valueOf(bundle.getString(”redis.pool.maxTotal”)));  
  17.         config.setMinIdle(Integer.valueOf(bundle.getString(”redis.pool.minIdle”)));  
  18.         config.setMaxIdle(Integer.valueOf(bundle.getString(”redis.pool.maxIdle”)));  
  19.         config.setMaxWaitMillis(Long.valueOf(bundle.getString(”redis.pool.maxWait”)));  
  20.         config.setTestWhileIdle(Boolean.valueOf(bundle.getString(”redis.pool.testWhileIdle”)));  
  21.         config.setTestOnBorrow(Boolean.valueOf(bundle.getString(”redis.pool.testOnBorrow”)));  
  22.         config.setTestOnReturn(Boolean.valueOf(bundle.getString(”redis.pool.testOnReturn”)));  
  23.         JedisPool pool = new JedisPool(config, bundle.getString(“redis.ip”), Integer.valueOf(bundle.getString(“redis.port”)));  
  24.   
  25.         // 從池中獲取一個Jedis對象  
  26.         Jedis jedis = pool.getResource();  
  27.         String key = ”key”;  
  28.         // 刪數據  
  29.         jedis.del(key);  
  30.         // 存數據  
  31.         jedis.set(key, ”abc123”);  
  32.         // 取數據  
  33.         String value = jedis.get(key);  
  34.         System.out.println(value);  
  35.         // 釋放對象池  
  36.         pool.returnResource(jedis);  
  37.     }  
  38.   
  39. }  
package cn.slimsmart.redis.demo.jedis;

import java.util.ResourceBundle;

import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;

public class JedisPoolTest {
    public static void main(String[] args) {
        ResourceBundle bundle = ResourceBundle.getBundle("redis");
        if (bundle == null) {
            throw new IllegalArgumentException("[redis.properties] is not found!");
        }
        JedisPoolConfig config = new JedisPoolConfig();
        config.setMaxTotal(Integer.valueOf(bundle.getString("redis.pool.maxTotal")));
        config.setMinIdle(Integer.valueOf(bundle.getString("redis.pool.minIdle")));
        config.setMaxIdle(Integer.valueOf(bundle.getString("redis.pool.maxIdle")));
        config.setMaxWaitMillis(Long.valueOf(bundle.getString("redis.pool.maxWait")));
        config.setTestWhileIdle(Boolean.valueOf(bundle.getString("redis.pool.testWhileIdle")));
        config.setTestOnBorrow(Boolean.valueOf(bundle.getString("redis.pool.testOnBorrow")));
        config.setTestOnReturn(Boolean.valueOf(bundle.getString("redis.pool.testOnReturn")));
        JedisPool pool = new JedisPool(config, bundle.getString("redis.ip"), Integer.valueOf(bundle.getString("redis.port")));

        // 從池中獲取一個Jedis對象
        Jedis jedis = pool.getResource();
        String key = "key";
        // 刪數據
        jedis.del(key);
        // 存數據
        jedis.set(key, "abc123");
        // 取數據
        String value = jedis.get(key);
        System.out.println(value);
        // 釋放對象池
        pool.returnResource(jedis);
    }

}
三、一致性哈希

Memcached完全基於分佈式集羣,而Redis是Master-Slave,如果想把Reids,做成集羣模式,無外乎多做幾套Master-Slave,每套Master-Slave完成各自的容災處理,通過Client工具,完成一致性哈希。Memcached是在Server端完成Sharding,Redis只能依靠各個Client做Sharding。在Redis 3.0系列支持Server端Sharding。

shared一致性哈希採用以下方案:
1.Redis服務器節點劃分:將每臺服務器節點採用hash算法劃分爲160個虛擬節點(可以配置劃分權重)
2.將劃分虛擬節點採用TreeMap存儲
3.對每個Redis服務器的物理連接採用LinkedHashMap存儲
4.對Key採用同樣的hash算法,然後從TreeMap獲取大於等於鍵hash值得節點,取最鄰近節點存儲;當key的hash值大於虛擬節點hash值得最大值時,存入第一個虛擬節點
sharded採用的hash算法:MD5和MurmurHash兩種;默認採用64位的MurmurHash算法。

1.配置文件redis.properties

  1. redis.pool.maxTotal=10  
  2. redis.pool.minIdle=2  
  3. redis.pool.maxIdle=10  
  4. redis.pool.maxWait=1000  
  5. redis.pool.testWhileIdle=true  
  6. redis.pool.testOnBorrow=true  
  7. redis.pool.testOnReturn=true  
  8. #IP  
  9. redis1.ip=192.168.36.189  
  10. redis2.ip=192.168.36.54  
  11. #Port  
  12. redis.port=6379  
redis.pool.maxTotal=10
redis.pool.minIdle=2
redis.pool.maxIdle=10
redis.pool.maxWait=1000
redis.pool.testWhileIdle=true
redis.pool.testOnBorrow=true
redis.pool.testOnReturn=true




IP

redis1.ip=192.168.36.189
redis2.ip=192.168.36.54

Port

redis.port=6379
2.實例代碼

  1. package cn.slimsmart.redis.demo.jedis;  
  2.   
  3. import java.util.LinkedList;  
  4. import java.util.List;  
  5. import java.util.ResourceBundle;  
  6.   
  7. import redis.clients.jedis.JedisPoolConfig;  
  8. import redis.clients.jedis.JedisShardInfo;  
  9. import redis.clients.jedis.ShardedJedis;  
  10. import redis.clients.jedis.ShardedJedisPool;  
  11.   
  12. public class JedisShardInfoTest {  
  13.   
  14.     public static void main(String[] args) {  
  15.         ResourceBundle bundle = ResourceBundle.getBundle(”redis”);  
  16.         if (bundle == null) {  
  17.             throw new IllegalArgumentException(“[redis.properties] is not found!”);  
  18.         }  
  19.         JedisPoolConfig config = new JedisPoolConfig();  
  20.         config.setMaxTotal(Integer.valueOf(bundle.getString(”redis.pool.maxTotal”)));  
  21.         config.setMinIdle(Integer.valueOf(bundle.getString(”redis.pool.minIdle”)));  
  22.         config.setMaxIdle(Integer.valueOf(bundle.getString(”redis.pool.maxIdle”)));  
  23.         config.setMaxWaitMillis(Long.valueOf(bundle.getString(”redis.pool.maxWait”)));  
  24.         config.setTestWhileIdle(Boolean.valueOf(bundle.getString(”redis.pool.testWhileIdle”)));  
  25.         config.setTestOnBorrow(Boolean.valueOf(bundle.getString(”redis.pool.testOnBorrow”)));  
  26.         config.setTestOnReturn(Boolean.valueOf(bundle.getString(”redis.pool.testOnReturn”)));  
  27.   
  28.         JedisShardInfo jedisShardInfo1 = new JedisShardInfo(bundle.getString(“redis1.ip”), Integer.valueOf(bundle.getString(“redis.port”)));  
  29.         JedisShardInfo jedisShardInfo2 = new JedisShardInfo(bundle.getString(“redis2.ip”), Integer.valueOf(bundle.getString(“redis.port”)));  
  30.         List<JedisShardInfo> list = new LinkedList<JedisShardInfo>();  
  31.         list.add(jedisShardInfo1);  
  32.         list.add(jedisShardInfo2);  
  33.         // 初始化ShardedJedisPool代替JedisPool  
  34.         ShardedJedisPool pool = new ShardedJedisPool(config, list);    
  35.         // 從池中獲取一個Jedis對象  
  36.         ShardedJedis jedis = pool.getResource();  
  37.         String keys = ”key”;  
  38.         String value = ”abc123”;  
  39.         // 刪數據  
  40.         jedis.del(keys);  
  41.         // 存數據  
  42.         jedis.set(keys, value);  
  43.         // 取數據  
  44.         String v = jedis.get(keys);  
  45.         System.out.println(v);  
  46.         // 釋放對象池  
  47.         pool.returnResource(jedis);  
  48.     }  
  49. }  
package cn.slimsmart.redis.demo.jedis;

import java.util.LinkedList;
import java.util.List;
import java.util.ResourceBundle;

import redis.clients.jedis.JedisPoolConfig;
import redis.clients.jedis.JedisShardInfo;
import redis.clients.jedis.ShardedJedis;
import redis.clients.jedis.ShardedJedisPool;

public class JedisShardInfoTest {

public static void main(String[] args) {
    ResourceBundle bundle = ResourceBundle.getBundle("redis");
    if (bundle == null) {
        throw new IllegalArgumentException("[redis.properties] is not found!");
    }
    JedisPoolConfig config = new JedisPoolConfig();
    config.setMaxTotal(Integer.valueOf(bundle.getString("redis.pool.maxTotal")));
    config.setMinIdle(Integer.valueOf(bundle.getString("redis.pool.minIdle")));
    config.setMaxIdle(Integer.valueOf(bundle.getString("redis.pool.maxIdle")));
    config.setMaxWaitMillis(Long.valueOf(bundle.getString("redis.pool.maxWait")));
    config.setTestWhileIdle(Boolean.valueOf(bundle.getString("redis.pool.testWhileIdle")));
    config.setTestOnBorrow(Boolean.valueOf(bundle.getString("redis.pool.testOnBorrow")));
    config.setTestOnReturn(Boolean.valueOf(bundle.getString("redis.pool.testOnReturn")));

    JedisShardInfo jedisShardInfo1 = new JedisShardInfo(bundle.getString("redis1.ip"), Integer.valueOf(bundle.getString("redis.port")));
    JedisShardInfo jedisShardInfo2 = new JedisShardInfo(bundle.getString("redis2.ip"), Integer.valueOf(bundle.getString("redis.port")));
    List&lt;JedisShardInfo&gt; list = new LinkedList&lt;JedisShardInfo&gt;();
    list.add(jedisShardInfo1);
    list.add(jedisShardInfo2);
    // 初始化ShardedJedisPool代替JedisPool
    ShardedJedisPool pool = new ShardedJedisPool(config, list);  
    // 從池中獲取一個Jedis對象
    ShardedJedis jedis = pool.getResource();
    String keys = "key";
    String value = "abc123";
    // 刪數據
    jedis.del(keys);
    // 存數據
    jedis.set(keys, value);
    // 取數據
    String v = jedis.get(keys);
    System.out.println(v);
    // 釋放對象池
    pool.returnResource(jedis);
}

}

通過以上方式,向redis進行set操作的key-value,會通過hash而均勻的分配到pool裏的redis機器中。

四、Spring集成

如果有必要,可以用Spring封裝初始化。

  1. <context:property-placeholder location=“classpath:redis.properties” />  
  2. <bean  
  3.     id=“jedisPoolConfig”  
  4.     class=“redis.clients.jedis.JedisPoolConfig”>  
  5.     <property  
  6.         name=“maxTotal”  
  7.         value={redis.pool.maxTotal}"</span><span>&nbsp;</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;</span></span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">property</span><span>&nbsp;&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="attribute">name</span><span>=</span><span class="attribute-value">"minIdle"</span><span>&nbsp;&nbsp;</span></span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="attribute">value</span><span>=</span><span class="attribute-value">" {redis.pool.minIdle}” />   
  8.     <property  
  9.         name=“maxIdle”  
  10.         value={redis.pool.maxIdle}"</span><span>&nbsp;</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;</span></span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">property</span><span>&nbsp;&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="attribute">name</span><span>=</span><span class="attribute-value">"maxWait"</span><span>&nbsp;&nbsp;</span></span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="attribute">value</span><span>=</span><span class="attribute-value">" {redis.pool.maxWait}” />  
  11.     <property  
  12.         name=“testWhileIdle”  
  13.         value={redis.pool.testWhileIdle}"</span><span>&nbsp;</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;</span></span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">property</span><span>&nbsp;&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="attribute">name</span><span>=</span><span class="attribute-value">"testOnBorrow"</span><span>&nbsp;&nbsp;</span></span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="attribute">value</span><span>=</span><span class="attribute-value">" {redis.pool.testOnBorrow}” />  
  14.     <property  
  15.         name=“testOnReturn”  
  16.         value={redis.pool.testOnReturn}"</span><span>&nbsp;</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;</span></span></li><li class=""><span><span class="tag">&lt;/</span><span class="tag-name">bean</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li><li class="alt"><span><span class="tag">&lt;</span><span class="tag-name">bean</span><span>&nbsp;&nbsp;</span></span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="attribute">id</span><span>=</span><span class="attribute-value">"shardedJedisPool"</span><span>&nbsp;&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="attribute">class</span><span>=</span><span class="attribute-value">"redis.clients.jedis.ShardedJedisPool"</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">constructor-arg</span><span>&nbsp;&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="attribute">index</span><span>=</span><span class="attribute-value">"0"</span><span>&nbsp;&nbsp;</span></span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="attribute">ref</span><span>=</span><span class="attribute-value">"jedisPoolConfig"</span><span>&nbsp;</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">constructor-arg</span><span>&nbsp;</span><span class="attribute">index</span><span>=</span><span class="attribute-value">"1"</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">list</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">bean</span><span>&nbsp;</span><span class="attribute">class</span><span>=</span><span class="attribute-value">"redis.clients.jedis.JedisShardInfo"</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">constructor-arg</span><span>&nbsp;&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="attribute">index</span><span>=</span><span class="attribute-value">"0"</span><span>&nbsp;&nbsp;</span></span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="attribute">value</span><span>=</span><span class="attribute-value">" {redis1.ip}” />  
  17.                 <constructor-arg  
  18.                     index=“1”  
  19.                     value={redis.port}"</span><span>&nbsp;&nbsp;</span></span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="attribute">type</span><span>=</span><span class="attribute-value">"int"</span><span>&nbsp;</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;/</span><span class="tag-name">bean</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">bean</span><span>&nbsp;</span><span class="attribute">class</span><span>=</span><span class="attribute-value">"redis.clients.jedis.JedisShardInfo"</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">constructor-arg</span><span>&nbsp;&nbsp;</span></span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="attribute">index</span><span>=</span><span class="attribute-value">"0"</span><span>&nbsp;&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="attribute">value</span><span>=</span><span class="attribute-value">" {redis2.ip}” />  
  20.                 <constructor-arg  
  21.                     index=“1”  
  22.                     value=“${redis.port}”  
  23.                     type=“int” />  
  24.             </bean>  
  25.         </list>  
  26.     </constructor-arg>  
  27. </bean>  
<context:property-placeholder location="classpath:redis.properties" /> 
<bean
id="jedisPoolConfig"
class="redis.clients.jedis.JedisPoolConfig">
<property
name="maxTotal"
value="${redis.pool.maxTotal}" />
<property
name="minIdle"
value="${redis.pool.minIdle}" />
<property
name="maxIdle"
value="${redis.pool.maxIdle}" />
<property
name="maxWait"
value="${redis.pool.maxWait}" />
<property
name="testWhileIdle"
value="${redis.pool.testWhileIdle}" />
<property
name="testOnBorrow"
value="${redis.pool.testOnBorrow}" />
<property
name="testOnReturn"
value="${redis.pool.testOnReturn}" />
</bean>
<bean
id="shardedJedisPool"
class="redis.clients.jedis.ShardedJedisPool">
<constructor-arg
index="0"
ref="jedisPoolConfig" />
<constructor-arg index="1">
<list>
<bean class="redis.clients.jedis.JedisShardInfo">
<constructor-arg
index="0"
value="${redis1.ip}" />
<constructor-arg
index="1"
value="${redis.port}"
type="int" />
</bean>
<bean class="redis.clients.jedis.JedisShardInfo">
<constructor-arg
index="0"
value="${redis2.ip}" />
<constructor-arg
index="1"
value="${redis.port}"
type="int" />
</bean>
</list>
</constructor-arg>
</bean>
當然,Spring提供了對於Redis的專門支持:spring-data-redis

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章