applicationContext-redis.xml(spring整合redis集群)


redis簡要介紹:
   為了保證數據的高可用性,加入了主從模式,一個主節點對應一個或多個從節點,
   主節點負責數據存取,而從節點通過異步復制的方式。從主節點拉取數據,做備
份,一旦主節點掛掉,通過選舉的方式(其他主節點投票)找出一個從節點做新
的主節點,如果沒有從節點來接替,集群就會掛掉。

在分片方面,redis cluster將鍵空間分為16384(2的14次方)個哈希槽,同時通過
crc16算法來計算key屬於哪個槽:HASH_SLOT = CRC16(key) mod 16384,然后
將key分配到這個哈希槽所在的節點上。至於哈希槽跟節點的分配,比如三個節點的話,
就平均分為三份,節點1覆蓋0-5460、節點2覆蓋5461-10922、節點3覆蓋10923-16383; 


<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/schema/p" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd"> <!-- 配置jedis連接池 --> <bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig"> <!-- 最大連接數 --> <property name="maxTotal" value="30" /> <!-- 最大空閑連接數 --> <property name="maxIdle" value="10" /> <!-- 每次釋放連接的最大數目 --> <property name="numTestsPerEvictionRun" value="1024" /> <!-- 釋放連接的掃描間隔(毫秒) --> <property name="timeBetweenEvictionRunsMillis" value="30000" /> <!-- 連接最小空閑時間 --> <property name="minEvictableIdleTimeMillis" value="1800000" /> <!-- 連接空閑多久后釋放, 當空閑時間>該值 且 空閑連接>最大空閑連接數 時直接釋放 --> <property name="softMinEvictableIdleTimeMillis" value="10000" /> <!-- 獲取連接時的最大等待毫秒數,小於零:阻塞不確定的時間,默認-1 --> <property name="maxWaitMillis" value="1500" /> <!-- 在獲取連接的時候檢查有效性, 默認false --> <property name="testOnBorrow" value="true" /> <!-- 在空閑時檢查有效性, 默認false --> <property name="testWhileIdle" value="true" /> <!-- 連接耗盡時是否阻塞, false報異常,ture阻塞直到超時, 默認true --> <property name="blockWhenExhausted" value="false" /> </bean>
   <!-- jedisCluster -->
  <bean id="jedisCluster" class="redis.clients.jedis.JedisCluster"> <!-- 參數的name注入 redis.clients.jedis.JedisCluster中的方法(不帶密碼的,參數name是nodes) public JedisCluster(Set<HostAndPort> nodes, int timeout) { this(nodes, timeout, DEFAULT_MAX_REDIRECTIONS); } 設置了密碼后需要用(參數name是 jedisClusterNode),下面是JedisCluster源碼中的一個構造方法: public JedisCluster(Set<HostAndPort> jedisClusterNode, int connectionTimeout, int soTimeout, int maxAttempts, String password, final GenericObjectPoolConfig poolConfig) { super(jedisClusterNode, connectionTimeout, soTimeout, maxAttempts, password, poolConfig); } --> <constructor-arg name="jedisClusterNode"> <set> <bean class="redis.clients.jedis.HostAndPort"> <constructor-arg name="host" value="192.168.1.11"/> <constructor-arg name="port" value="7001"/> </bean> <bean class="redis.clients.jedis.HostAndPort"> <constructor-arg name="host" value="192.168.1.12"/> <constructor-arg name="port" value="7002"/> </bean> <bean class="redis.clients.jedis.HostAndPort"> <constructor-arg name="host" value="192.168.1.13"/> <constructor-arg name="port" value="7003"/> </bean> <bean class="redis.clients.jedis.HostAndPort"> <constructor-arg name="host" value="192.168.1.14"/> <constructor-arg name="port" value="7004"/> </bean> <bean class="redis.clients.jedis.HostAndPort"> <constructor-arg name="host" value="192.168.1.15"/> <constructor-arg name="port" value="7005"/> </bean> <bean class="redis.clients.jedis.HostAndPort"> <constructor-arg name="host" value="192.168.1.16"/> <constructor-arg name="port" value="7006"/> </bean> </set> </constructor-arg> <constructor-arg name="connectionTimeout" value="10000" type="int" /> <constructor-arg name="soTimeout" value="10000" type="int" /> <constructor-arg name="maxAttempts" value="200" type="int" /> <constructor-arg name="password" value="abc123" /> <!--集群 redis.conf的 requirepass abc123 密碼-->

    <constructor-arg name="poolConfig" ref="jedisPoolConfig"/>
  </bean> 

  

    <!-- jedis整合spring單機版 -->
      <bean id="jedisPool" class="redis.clients.jedis.JedisPool" destroy-method="destroy">
      <!-- index注入的,依靠於;按照參數順序一一對應 redis.clients.jedis.JedisPool中的方法
        public JedisPool(final GenericObjectPoolConfig poolConfig, final String host, int port,
          int timeout, final String password) {
          this(poolConfig, host, port, timeout, password, Protocol.DEFAULT_DATABASE, null);
        }
    -->
    <constructor-arg index="0" ref="jedisPoolConfig"/>
    <constructor-arg index="1" value="120.79.5.18"/>
    <constructor-arg index="2" value="6379" type="int"/>
    <constructor-arg index="3" value="1500" type="int"/>
    <constructor-arg index="4" value="fooD527zS"/><!--redis.conf 中 requirepass 設置的密碼-->

    <!-- 源碼 JedisPool 通過name注入
    依靠該方法
      public JedisPool(final GenericObjectPoolConfig poolConfig, final String host, final int port) {
        this(poolConfig, host, port, Protocol.DEFAULT_TIMEOUT, null, Protocol.DEFAULT_DATABASE, null);
      }
    <constructor-arg name="host" value="120.79.5.18"/>
    <constructor-arg name="port" value="6379"/>
    <constructor-arg name="poolConfig" ref="jedisPoolConfig"/>
    -->
    </bean>



 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM