mp9*_*1de 56
这个问题是基于意见的,但我们可以得到一些客观的观点:
司机的选择取决于多种因素:
在添加库时,有些项目会考虑其他依赖项和瞬态依赖项.
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的支持.
| 归档时间: |
|
| 查看次数: |
15775 次 |
| 最近记录: |