首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

Redis 單機與叢集部署全攻略:從安裝到 Java 整合

     編輯:Java 綜合教學

Redis 單機版部署

1. 環境準備與安裝

# 下載原始碼
wget https://download.redis.io/releases/redis-3.0.7.tar.gz
tar -zxf redis-3.0.7.tar.gz

# 編譯安裝至指定目錄
cd redis-3.0.7
make PREFIX=/usr/local/redis install

2. 關鍵配置修改

  • 複製配置檔:cp redis.conf /usr/local/redis/bin/
  • 編輯 redis.conf:
    • daemonize yes:啟用後台運行
    • port 6379:預設埠號,可自訂

3. 啟動與驗證

# 啟動
./redis-server redis.conf

# 驗證
ps -ef | grep redis
redis-cli ping  # 回傳 PONG 表示正常

4. Jedis 客戶端整合

// Maven 依賴
<dependency>
  <groupId>redis.clients</groupId>
  <artifactId>jedis</artifactId>
  <version>2.7.0</version>
</dependency>

// 單機直連
Jedis jedis = new Jedis("192.168.198.130", 6379);
jedis.set("test", "value");
String val = jedis.get("test");
jedis.close();

// 連接池模式(生產推薦)
JedisPool pool = new JedisPool("192.168.198.130", 6379);
Jedis jedis = pool.getResource();
// ...操作...
jedis.close(); // 歸還連接
pool.close();

5. Spring 整合配置

<bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">
  <property name="maxTotal" value="30"/>
  <property name="maxIdle" value="10"/>
  <property name="maxWaitMillis" value="1500"/>
  <property name="testOnBorrow" value="true"/>
  <property name="testWhileIdle" value="true"/>
</bean>

<bean id="redisClient" class="redis.clients.jedis.JedisPool">
  <constructor-arg name="host" value="${JEDIS_HOST}"/>
  <constructor-arg name="port" value="6379"/>
  <constructor-arg name="poolConfig" ref="jedisPoolConfig"/>
</bean>

<bean id="redisClientDao" class="com.taotao.rest.dao.impl.JedisClientSingle"/>

Redis 叢集部署

叢集架構核心原理

  • 去中心化:所有節點互聯,採用 PING-PONG 機制,二進制協議優化傳輸
  • 槽位映射:16384 個哈希槽,CRC16(key) % 16384 決定槽位,槽位均勻分佈到節點
  • 客戶端直連:無需 Proxy,連任一可用節點即可
  • 故障轉移:超過半數 Master 判定失效才觸發故障轉移

環境準備

# 安裝 Ruby 環境(redis-trib.rb 依賴)
yum install ruby rubygems
gem install /usr/local/redis-3.0.0.gem

節點規劃(單機模擬 6 節點)

角色IP:Port目錄
Master192.168.198.130:7001~7003/usr/local/redis-cluster/7001~7003
Slave192.168.198.130:7004~7006/usr/local/redis-cluster/7004~7006

各節點複製 redis.conf 並修改 port、啟用 cluster-enabled yes、設定 cluster-config-file nodes.conf。

建立叢集

# 啟動 6 個實例
for port in 7001 7002 7003 7004 7005 7006; do
  cd /usr/local/redis-cluster/$port && ./redis-server redis.conf
done

# 建立叢集(1 主 1 從)
cp /usr/soft/redis-3.0.7/src/redis-trib.rb /usr/local/redis-cluster/
./redis-trib.rb create --replicas 1 \
  192.168.198.130:7001 192.168.198.130:7002 192.168.198.130:7003 \
  192.168.198.130:7004 192.168.198.130:7005 192.168.198.130:7006

叢集管理操作

  • 新增 Master:./redis-trib.rb add-node 192.168.198.130:7007 192.168.198.130:7001
  • 槽位重分配:./redis-trib.rb reshard 192.168.198.130:7001 → 依提示輸入槽數、目標節點 ID、來源節點
  • 新增 Slave:./redis-trib.rb add-node --slave --master-id <master_id> 192.168.198.130:7008 192.168.198.130:7001
  • 刪除節點:./redis-trib.rb del-node 192.168.198.130:7008 <node_id>(需先遷移槽位)

JedisCluster 客戶端與 Spring 整合

// Java 直連
Set<HostAndPort> nodes = new HashSet<>();
nodes.add(new HostAndPort("192.168.198.130", 7001));
// ...加入所有節點...
JedisCluster cluster = new JedisCluster(nodes);
cluster.set("key", "value");
cluster.close();

// Spring 配置
<bean id="redisCluster" class="redis.clients.jedis.JedisCluster">
  <constructor-arg name="nodes">
    <set>
      <bean class="redis.clients.jedis.HostAndPort">
        <constructor-arg value="192.168.198.130"/>
        <constructor-arg value="7001"/>
      </bean>
      <!-- 其他 5 節點 -->
    </set>
  </constructor-arg>
  <constructor-arg name="poolConfig" ref="jedisPoolConfig"/>
</bean>

封裝工具類模式

分別實作 JedisClientSingle(單機)與 JedisClientCluster(叢集)介面,注入 JedisPool 或 JedisCluster,統一對外暴露 get/set/hget/hset/incr/expire/ttl/del/hdel 等方法。注意叢集模式下不可調用 close(),否則後續無法連線。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved