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);
   }
 }

猜你喜欢

转载自blog.csdn.net/weixin_34874025/article/details/82953983