Jedis Commands API說明

Jedis Commands API說明

本章主要針對Jedis源碼中部分模塊進行說明和簡單分析,其中主要包括如下部分

  • Commands API 說明
  • Client & Connection職能說明

前提說明

  • Jedis中提供兩種Cluster模式,分別爲:
    • JedisCluster – 基於Redis官方提供的集羣模式
    • ShardedJedis – 基於ConsistentHash算法的集羣模式
  • Jedis提供的Client的類型共有三種:非集羣的Jedis & 以上兩種集羣Jedis

Commands API 說明

Jedis Commands API

1. Command類型說明

  • Jedis中,爲Commands提供了兩種實現:1. String 類型的 Commands;2. byte[] 類型的 Commands

2. Jedis客戶端的繼承關係

  • Jedis extends BinaryJedis
  • JedisCluster extends BinaryJedisCluster
  • ShardedJedis extends BinaryShardedJedis

3. 分佈式操作支持(具體情況暫不細說)

  • mget & mset
    • JedisCluster 需要要求所有key都處於同一個slot中(存在Redirect情況)
    • ShardedJedis 不支持
  • Pipeline
    • ShardedJedis 實現時 嚴格 記錄了請求的順序,同時,獲取結果時,也是 嚴格 按照請求順序獲取
    • JedisCluster 對 Pipeline 不提供支持(存在Redirect情況)
  • Transaction
    • JedisCluster & ShardedJedis 對 Transaction 都不提供支持

Client & Connection職能說明

Client & Connection 邏輯

1. 各組件功能說明

  • Client:封裝基於String類型的Commands請求
  • BinaryClient:封裝基於byte[]類型的Commands請求
  • Connection:封裝對連接的管理(connect & disconnect)及Commands的發送
  • Protocol:封裝與Redis Server通信的協議(排版 & 分隔符等)

2. 其他說明

  • 由此可見,Jedis & Jedis & ShardedJedis 等都是對 能力(able)的封裝,真正的實現還是基於Client
  • 源碼可知 Redis 以響應二進制流的首位的不同來表示不同情況(如想了解不同類型的區別,還需查閱Redis Server源碼)
private static Object process(final RedisInputStream is) {
   final byte b = is.readByte();
   if (b == PLUS_BYTE) {
     return processStatusCodeReply(is);
   } else if (b == DOLLAR_BYTE) {
     return processBulkReply(is);
   } else if (b == ASTERISK_BYTE) {
     return processMultiBulkReply(is);
   } else if (b == COLON_BYTE) {
     return processInteger(is);
   } else if (b == MINUS_BYTE) {
     processError(is);
     return null;
   } else {
     throw new JedisConnectionException("Unknown reply: " + (char) b);
   }
 }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章