作为Redis官方推荐的三个Java Client之一,Jedis推出时间最早,使用最为广泛(Spring默认使用的Redis Client就是Jedis),同时Star数也遥遥领先于另外两个。和其他Redis Client一样,Jedis通过RESP协议向Redis发送命令请求和解析响应数据。
最新版本的Jedis代码行数超过18K,和Redis本身(20K)处于同一规模。面对如此庞大的项目,分模块阅读是必然之选。由于类的数量太多,本文只在类层面进行简单解读,不会涉及具体的源代码。值得一提的是,虽然Jedis的代码称不上规范,比如全局缺注释、某些类的长度过长,但由于绝大多数方法都很简短,加上清晰的命名和完善的单元测试,代码可读性并没有太大影响。
A: Binary的父类与非Binary的子类表面的区别是不管是key,还是value,只要涉及字符串语义的参数,前者都用byte[]类型传参,而后者使用String类型。而深层次的原因,我认为跟RESP协议有关,RESP协议是面向字节的协议,对于性能要求极高的场景,使用Binary类有助于提高性能(因为减少了一次String到byte[]的转换)。
A: 简单来说,Pipeline和Transaction是批处理运行模式,一次获取多条命令的执行结果,而Jedis只能一条一条获取。而Pipeline和Transaction的区别主要有两点:1)Pipeline同时支持事务模式和非事务模式,而Transaction支持事务模式。2)Pipeline类型安全,Transaction类型非安全。
上面提到Jedis的代码规模很大,进一步分析排名靠前的几个大类,可以发现两个明显的特点:
单从缩减代码行数的角度来看,至少可以考虑两种方式: