Redisson vs Jedis为redis

Shu*_*sia 32 java caching redis jedis redisson

现在我必须使用java客户端进行redis.我遇到过JedisRedisson.

编辑:重新定义,因为问题是基于意见.

哪个在速度方面更有效?任何基准?

哪个能够提供以下哪些?

  • 分布式锁(并更新地图中的一些键)

  • 自动密钥到期通知,但我希望仅由一组订户中的一个特定订户接收(类似于Apache Kafka中的消费者组概念).如何实现这一目标?

PS:请不要将其标记为重复.

mp9*_*1de 56

这个问题是基于意见的,但我们可以得到一些客观的观点:

TL; DR:

司机的选择取决于多种因素:

  • 其他依赖项
  • 编程模型
  • 可扩展性
  • 关于高级功能的实现是自以为是的
  • 您的项目前景,您想要发展的方向

说明

其他依赖项

在添加库时,有些项目会考虑其他依赖项和瞬态依赖项.

Jedis几乎不依赖于它,它需要Apache Commons Pool 2来实现连接池.

Redisson需要Netty,JCache API和Project Reactor作为基本依赖项.它是可扩展的,因为它与许多其他库(Tomcat会话存储)集成.

编程模型

这就是您与Redis客户端进行交互的方式.它还定义了抽象级别.

Jedis是一个低级驱动程序,将Redis API暴露为Java方法调用:

Jedis jedis = …;

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

List<String> values = jedis.mget("key", "key2", "key3");
Run Code Online (Sandbox Code Playgroud)

Redisson是一个高级客户端,通过各种API对象公开其功能:

Redisson redisson = …

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

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

map.containsKey("key");

map.get("key");
Run Code Online (Sandbox Code Playgroud)

每个调用调用一个或多个Redis调用,其中一些调用Lua(Redis"Scripting")实现.

可扩展性

有多个可用于Java的驱动程序,它们具有适合您项目的各种属性.可扩展性也适用于此.看看驱动程序,它归结为驱动程序,如何使用它们的资源以及它们支持的编程模型.

Jedis使用阻塞I/O,方法调用是同步的.您的程序流程必须等到套接字处理I/O. 没有异步(Future,CompletableFuture)或反应支持(RxJava Observable或Reactive Streams Publisher).

Jedis客户端实例不是线程安全的,因此它们需要连接池(每个调用线程的Jedis实例).

Redisson使用非阻塞I/O和带有netty的事件驱动通信层.方法调用是同步的,异步的或被动的(通过Project Reactor 2.0或3.1).连接是池化的,但API本身是线程安全的,需要的资源更少.我不完全确定,但也许你甚至可以在一个连接上运行.这是使用Redis时最有效的方法.

关于客户端实现的意见

这些段落涉及客户的实施方式.

两个客户都具有出色的功能覆盖范围,您可以通过两个库满足您的要求.

Jedis是一个简单的实现,它只是将命令写入OutputStream并解析响应.仅此而已.

如果您需要高级功能,则需要使用Redis API实现这些功能.它使您可以完全控制您调用的命令以及产生的行为.实现您的功能可能需要额外的努力.

Redisson是一个高级客户端,通过其抽象提供功能.虽然你可以使用这些对象,而无需知道他们被Redis的(支持的Map,List,Set,...),每个API调用转换为一个或多个Redis的呼吁,一些人的Lua脚本执行.

您可能喜欢或不喜欢Redisson的行为方式以及它如何实现这些功能,但最终,您无法做到这一点.使用Redissons高级功能可能会减少您的实施工作.

外表

该部分完全取决于您前往的目的地.Jedis支持所有Redis API命令,Redis Standalone,Redis Sentinel和Redis Cluster.在主从设置中没有从属读取,但我认为这只是时间问题,直到jedis将提供这些功能.

使用jedis,您无法进行异步并使用AWS ElastiCache的高级功能,或者从属读取需要您自己的实现.

Redisson具有广泛的各种设置.它支持Jedis支持的所有功能,并为Master/Slave设置提供读取策略,改进了对AWS ElastiCache的支持.

  • 谢谢你这么深刻的解释!"我不完全确定,但也许你甚至可以在一个连接上运行."确保,Redisson只能使用一个连接:) (5认同)