[翻译]Jedis与Redisson选型对比

概述

Jedis和Redisson都是Java中非常成熟的Redis类库(7000+stars),选型主要考虑以下几个方面,引入新依赖数量、编程模式、可扩展性、代码实现、项目规划。
翻译自Stack Overflow上的回答:https://stackoverflow.com/a/42255613 ,原文更新时间2017年10月6日,没有信达雅的地方欢迎多多指教0.0

第三方依赖数量

Jedis基本上没有什么依赖dependency-free,仅仅依赖了Apache Commons Pool 2用作连接池。
在这里插入图片描述
Redisson需要Netty,JCache API以及Project Reactor几个大的第三方库作为基本的依赖,这是也是他方便扩展的一个原因
[翻译]Jedis与Redisson选型对比_第1张图片

编程模式

这指的是你怎么调用Redis的客户端,并且决定你功能的抽象层次。
Jedis是一个低层次的类库,直接将Redis API暴露为Java的方法调用,基本是一个方法对应一个Redis的API:

Jedis jedis = …;

jedis.set("key", "value");

List values = jedis.mget("key", "key2", "key3");

Redisson是一个高层次封装的客户端,暴露给用户的是方便且齐全的新方法,还提供Redis本身没有的数据结构;每个方法底层会可能会有一个或多个Redis的调用,并且还会有Lua脚本的调用

Redisson redisson = …

RMap map = redisson.getMap("my-map"); // implement java.util.Map

map.put("key", "value");

map.containsKey("key");

map.get("key");

可扩展性

我们来看看他们底层的编程模式。
Jedis使用了阻塞IO和同步方法调用。你的程序编码逻辑需要一直等待,直到网络IO的完成。不支持异步(Future, CompletableFuture)和响应式编程(RxJava Observable or Reactive Streams Publisher)。Jedis如果不用线程池,每个client实例还是非线程安全的。
反观Redisson使用非阻塞IO、Netty事件驱动的通信。方法调用支持同步、异步也可以是响应式的( Project Reactor )。连接是使用连接池,并且API本事线程安全且耗费资源更少。

代码实现

两个类库功能都非常丰富,都可以满足我们的功能需求。
Jedis是一个很直接简单的实现,直接通过将命令写入OutputStream并解析响应,没有更高级操作。如果你需要更高级的功能,只能自己用Redis API去实现。Jedis让你可以完全控制你所调用的命令和相应的返回值,相应地你需要花额外的精力去实现的功能。
Redisson作为一个高层级的客户端,通过新的抽象去提供功能调用。你无需知道Redis具体如何操作,就可以使用这些功能和结构(Map, List, Set, …),Redisson会自动转换成相应的Redis调用。你可能并不喜欢他的一些功能和具体实现,但是你很难做相应的修改(除非你熟悉整个框架,并对源码进行修改)。但是直接使用他的高级功能,可以避免你很多额外的开发。

项目规划

完全取决于你项目技术发展方向。
Jedis简单,但是没有异步,跟云平台(如AWS ElastiCache)结合可能需要定制开发。
Redisson功能齐全,包含Jedis的所有功能,对云平台的支持支持。

总结

功能需求不多,上Jedis即可
功能需求复杂使用Redisson,虽然臃肿但是功能齐全

参考

Jedis与Redisson选型对比 //这篇译文没有好像没有指明出处。。。

你可能感兴趣的:(技术应用)