第七天:redis集羣

搭建redis集羣

  • 集羣搭建步驟
    1. 創建6個redis實例,端口號從7001~7006
    2. 修改redis配置文件:vim redis01.conf
      • 配置端口號
        port 7001
      • 打開cluster-enable前面的註釋,打開集羣
        cluster-enable yes
      • 其他5個redis實例複製01的配置文件,並修改端口號
    3. 把創建集羣的ruby腳本複製到redis-cluster目錄下
      • 在解壓縮的文件下:/redis-3.0.0/src/redis-trib.rb
    4. 將redis-cluster下面的6個redis啓動
      • 用腳本的方式啓動6個redis
        1. vim startall.sh
        
            cd redis01
            ./redis-server redis.conf
            cd ..
            cd redis02
            ./redis-server redis.conf
            cd ..
            cd redis03
            ./redis-server redis.conf
            cd ..
            cd redis04
            ./redis-server redis.conf
            cd ..
            cd redis05
            ./redis-server redis.conf
            cd ..
            cd redis06
            ./redis-server redis.conf
            cd ..
            
        2. chmod -x startall.sh		或者 chmod 777 startall.sh	
        3. ./startall.sh
        4. ps aux|grep redis
        
    5. 創建集羣
      • 運行腳本
        ./redis-trib.rb create --replicas 1 192.168.1.128:7001 192.168.1.128:7002 192.168.1.128:7003 192.168.1.128:7004 192.168.1.128:7005  192.168.1.128:7006
        
    6. 測試集羣
      • 測試
        # 末尾沒有 -c ,報錯
        [root@rzk redis-cluster]# redis01/redis-cli -h 192.168.1.128 -p 7002
        192.168.1.128:7002> set a 100
        (error) MOVED 15495 192.168.25.153:7003
        192.168.1.128:7002>
        
        [root@rzk redis-cluster]# redis01/redis-cli -h 192.168.1.128 -p 7002 -c
        192.168.1.128:7002> set a 100
        -> Redirected to slot [15495] located at 192.168.1.128:7003
        OK
        
    7. 關閉redis集羣
      • 用腳本的方式關閉
        vim /usr/local/redis-cluster/shutdownall.sh
            redis01/redis-cli -p 7001 shutdown
            redis02/redis-cli -p 7002 shutdown
            redis03/redis-cli -p 7003 shutdown
            redis04/redis-cli -p 7004 shutdown
            redis05/redis-cli -p 7005 shutdown
            redis06/redis-cli -p 7006 shutdown
        
  • redis客戶端
    • redis-cli【自帶的客戶端】
    • redis-desktop-manager【圖形化客戶端 只是單機版不能做集羣】

redis 整合 spring

  • 創建 applicationContext-jedis.xml
    1. 單機版整合
      • xml 配置【連接池可省略,使用默認】
        <!-- 連接池配置 -->
        <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> 
        
        <!-- jedis客戶端單機版 -->
        <bean id="redisClient" class="redis.clients.jedis.JedisPool">
        <constructor-arg name="host" value="192.168.25.153"></constructor-arg>
        <constructor-arg name="port" value="6379"></constructor-arg>
        <constructor-arg name="poolConfig" ref="jedisPoolConfig"></constructor-arg>
        </bean>
        
      • java測試
        /**
          * 單機版測試
          * <p>Title: testSpringJedisSingle</p>
          * <p>Description: </p>
          */
        @Test
        public void testSpringJedisSingle() {
           ApplicationContext applicationContext = new ClassPathXmlApplicationContext("classpath:spring/applicationContext-*.xml");
           JedisPool pool = (JedisPool) applicationContext.getBean("redisClient");
           Jedis jedis = pool.getResource();
           String string = jedis.get("key1");
           System.out.println(string);
           jedis.close();
           pool.close();
           }
        
    2. 集羣版整合
      • xml 配置
        <bean id="redisClient" class="redis.clients.jedis.JedisCluster">
        <constructor-arg name="nodes">
        <set>
        <bean class="redis.clients.jedis.HostAndPort">
        <constructor-arg name="host" value="192.168.1.128"></constructor-arg>
        <constructor-arg name="port" value="7001"></constructor-arg>
        </bean>
        <bean class="redis.clients.jedis.HostAndPort">
        <constructor-arg name="host" value="192.168.1.128"></constructor-arg>
        <constructor-arg name="port" value="7002"></constructor-arg>
        </bean>
        <bean class="redis.clients.jedis.HostAndPort">
        <constructor-arg name="host" value="192.168.1.128"></constructor-arg>
        <constructor-arg name="port" value="7003"></constructor-arg>
        </bean>
        <bean class="redis.clients.jedis.HostAndPort">
        <constructor-arg name="host" value="192.168.1.128"></constructor-arg>
        <constructor-arg name="port" value="7004"></constructor-arg>
        </bean>
        <bean class="redis.clients.jedis.HostAndPort">
        <constructor-arg name="host" value="192.168.1.128"></constructor-arg>
        <constructor-arg name="port" value="7005"></constructor-arg>
        </bean>
        <bean class="redis.clients.jedis.HostAndPort">
        <constructor-arg name="host" value="192.168.1.128"></constructor-arg>
        <constructor-arg name="port" value="7006"></constructor-arg>
        </bean>
        </set>
        </constructor-arg>
        <constructor-arg name="poolConfig" ref="jedisPoolConfig"></constructor-arg>
        </bean>
        
      • java測試
        @Test
        public void testSpringJedisCluster() {
            ApplicationContext applicationContext = new ClassPathXmlApplicationContext("classpath:spring/applicationContext-*.xml");
            JedisCluster jedisCluster = (JedisCluster) applicationContext.getBean("redisClient");
            String string = jedisCluster.get("key1");
            System.out.println(string);
            jedisCluster.close();
        }
        
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章