1. 程式人生 > >Redis入門很簡單之七【使用Jedis實現客戶端Sharding】

Redis入門很簡單之七【使用Jedis實現客戶端Sharding】

 1. sharding機制:即通常所說的“分片”,允許資料存放在不同的物理機器上,  以適應資料量過大的場景,克服單臺機器記憶體或者磁碟空間的限制。而這種“離散式”地存放,對客戶端來說是透明的,對客戶端來講,完全看不到這種差別。
 2. 常見的記憶體快取中介軟體,比如Memcached支援伺服器端Sharding,客戶端根本無須關心具體的實現細節。而Redis並不支援伺服器端分片,不過我們可以使用Jedis提供的API來實現客戶端的分片,通過“一致性hash”演算法,使得資料離散地存放在不同的伺服器上面。
 3. 對客戶端來說,這是透明的,資料具體存在在那一臺機器上面,對客戶端來講是無差別的。然後,通過不同機器上面的Redis控制檯,我們還是可以看出資料的儲存情況。
 4. 優缺點:使用Sharding機制,克服了單臺伺服器的“記憶體限制”,但是不可避免的降低了資料的儲存和訪問效率。

<二>. 進行配置:
 1. 增加節點:去掉之前的主從配置,作為用作Sharding的一臺伺服器,增加屬性設定

Shell程式碼  收藏程式碼
  1. redis.host2=192.168.142.34  

  2. 連線池配置:使用shardedJedisPool

Xml程式碼  收藏程式碼
  1. <bean id = "shardedJedisPool" class = "redis.clients.jedis.ShardedJedisPool">  
  2.     <constructor-arg index="0" ref="jedisPoolConfig"/>  
  3.     <
    constructor-arg index="1">  
  4.         <list>  
  5.             <bean class="redis.clients.jedis.JedisShardInfo">  
  6.                 <constructor-arg index="0" value="${redis.host}"/>         
  7.                 <constructor-arg index="1" value="${redis.port}" type="int"/>  
  8.                 <
    constructor-arg index="2" value="${redis.timeout}" type="int"/>  
  9.                 <property name="password" value="${redis.password}"/>  
  10.             </bean>  
  11.             <bean class="redis.clients.jedis.JedisShardInfo">  
  12.                 <constructor-arg index="0" value="${redis.host2}"/>         
  13.                 <constructor-arg index="1" value="${redis.port}" type="int"/>  
  14.                 <constructor-arg index="2" value="${redis.timeout}" type="int"/>  
  15.                 <property name="password" value="${redis.password}"/>  
  16.             </bean>  
  17.         </list>             
  18.     </constructor-arg>  
  19. </bean>  

 <三>. 使用API程式設計:
  1. 獲取shardedJedis:

Java程式碼  收藏程式碼
  1. ShardedJedisPool shardedPool = (ShardedJedisPool)context.getBean("shardedJedisPool");  
  2. ShardedJedis shardedJedis = shardedPool.getResource();  
  3.  ...  
  4. shardedPool.returnResource(shardedJedis);   

  2. 儲存/訪問/刪除資料:

Java程式碼  收藏程式碼
  1. shardedJedis.set("president""Obama");  
  2. String president = shardedJedis.get("president");  
  3. shardedJedis.del("president");