Jedis Commands API說明
本章主要針對Jedis源碼中部分模塊進行說明和簡單分析,其中主要包括如下部分
- Commands API 說明
- Client & Connection職能說明
前提說明
- Jedis中提供兩種Cluster模式,分別爲:
- JedisCluster – 基於Redis官方提供的集羣模式
- ShardedJedis – 基於ConsistentHash算法的集羣模式
- Jedis提供的Client的類型共有三種:非集羣的Jedis & 以上兩種集羣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職能說明
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);
}
}