Redis最流行的两个Java客户端库是Redisson和Jedis。Redisson提供内存中的数据网格功能,支持Redis的各种分布式对象和服务。另一方面,Jedis是一个更轻量级的产品,它缺乏其他库的某些功能。
如果你正在为Redis寻找一个Java客户端库,你可能会想Redisson和Jedis的优缺点。在本文中,我们将比较和对比Redisson和Jedis提供的不同功能。
一 、分布式集合
|-----------------|----------|---------------------|
| | Redisson | Jedis |
| Map | √ | plain commands only |
| Multimap | √ | × |
| Set | √ | plain commands only |
| List | √ | plain commands only |
| Queue | √ | plain commands only |
| Deque | √ | plain commands only |
| SortedSet | √ | × |
| ScoredSortedSet | √ | plain commands only |
| PriorityQueue | √ | × |
| PriorityDeque | √ | × |
| DelayedQueue | √ | × |
| Stream | √ | plain commands only |
| RingBuffer | √ | × |
| TransferQueue | √ | × |
| TimeSeries | √ | × |
Redisson实现了许多不同的Java对象,包括分布式集合。这些Redisson对象帮助Java程序员使用他们在Java中习惯的许多熟悉的数据结构。
Redisson中的分布式集合列表包括:
- Map
- Multimap
- Set
- List
- Queue
- Deque
- SortedSet
- ScoredSortedSet
- PriorityQueue
- PriorityDeque
- DelayedQueue
- Stream
- RingBuffer
另一方面,Jedis对Redis中分布式集合的支持要少得多。
只有Jedis中的普通命令才支持以下对象:
- Map
- Multimap
- Set
- List
- Queue
- Deque
- ScoredSortedSet
二、分布式锁和同步器
|----------------|----------|-------|
| | Redisson | Jedis |
| Lock | √ | × |
| Semaphore | √ | × |
| CountDownLatch | √ | × |
| FairLock | √ | × |
| MultiLock | √ | × |
| ReadWriteLock | √ | × |
当处理分布式系统时,锁和同步的问题变得更加复杂,因为不同的客户端位于不同的机器上。
幸运的是,Redisson支持一些常见的Java锁和同步器用于分布式计算,例如:
- Lock
- Semaphore
- CountDownLatch
- FairLock
- MultiLock
然而,Jedis在Redis中不支持任何这些锁和同步器。这意味着您必须自己处理这个问题,从而使开发过程更加复杂。
三、分布式对象
|----------------------------|----------|---------------------|
| | Redisson | Jedis |
| Object holder | √ | plain commands only |
| AtomicLong | √ | plain commands only |
| LongAdder | √ | × |
| DoubleAdder | √ | × |
| Publish/Subscribe | √ | plain commands only |
| Reliable Publish/Subscribe | √ | × |
| Id Generator | √ | × |
| AtomicDouble | √ | plain commands only |
| Geospatial | √ | plain commands only |
| BitSet | √ | plain commands only |
| BloomFilter | √ | × |
| BinaryStream | √ | × |
| HyperLogLog | √ | plain commands only |
| RateLimiter | √ | × |
除了分布式集合、锁和同步器,Redisson还在Java中为Redis实现了各种其他分布式对象:
- ObjectHolder
- AtomicLong
- Publish/Subscribe
- AtomicDouble
- Geospatial
- BitSet
- BloomFilter
- BinaryStream
- HyperLogLog
在上面的分布式对象中,Jedis根本不支持BloomFilter或BinaryStream对象。仅通过普通命令支持列表中的其他对象。
四、高级缓存支持
|-----------------------------------------------|----------|-------|
| | Redisson | Jedis |
| JCache API | √ | × |
| JCache API with near cache (up to 45x faster) | √ | × |
| Near Cache | √ | × |
| Read-through strategy support | √ | × |
| Write-through strategy support | √ | × |
| Write-behind strategy support | √ | × |
只有Redisson具有各种高级缓存功能。例如,Redisson支持三种不同的缓存策略:读通、写通和写后。Redisson还有一个JCache API和一个近缓存,用于保存从远程缓存中提取的对象的本地副本。然而,Jedis没有开箱即用地支持上述任何功能。
五、Transactions
|------------------|----------|-------|
| | Redisson | Jedis |
| Transactions API | √ | × |
六、API architecture
|---------------------------|----------|-------|
| | Redisson | Jedis |
| Instance thread-safety | √ | × |
| Asynchronous interface | √ | × |
| Reactive stream interface | √ | × |
| RxJava3 interface | √ | × |
Redisson包括对实例线程安全、异步接口、Reactive Streams API和RxJava3 API的支持。然而,杰迪斯完全缺乏这种支持。
七、Distributed services
|-------------------|----------|-------|
| | Redisson | Jedis |
| ExecutorService | √ | × |
| MapReduce | √ | × |
| SchedulerService | √ | × |
| RemoteService | √ | × |
| LiveObjectService | √ | × |
Redisson支持Java中的各种分布式服务:
- ExecutorService
- MapReduce
- SchedulerService
- RemoteService
- LiveObjectService
不幸的是,Jedis不支持这些分布式服务。
八、与框架的集成
|---------------------------------------------------|----------|-------|
| | Redisson | Jedis |
| Spring Cache | √ | × |
| Spring Cache with near cache (up to 45x faster) | √ | × |
| Hibernate Cache | √ | × |
| Hibernate Cache with near cache (up to 5x faster) | √ | × |
| MyBatis Cache | √ | × |
| MyBatis Cache with near cache (up to 45x faster) | √ | × |
| Tomcat Session Manager | √ | × |
| Spring Session | √ | × |
Jedis包括对SpringSession和SpringCache框架的支持。除了这两个框架之外,Redisson还支持Hibernate Cache和Tomcat会话管理器。
九、Security
|----------------|----------|-------|
| | Redisson | Jedis |
| Authentication | √ | × |
| SSL support | √ | × |
好消息是,Jedis和Redisson都包含关键的安全功能,如身份验证和SSL支持。
十、自定义数据序列化
|--------------------------|----------|-------|
| | Redisson | Jedis |
| JSON codec | √ | × |
| JDK Serialization | √ | × |
| Avro codec | √ | × |
| Smile codec | √ | × |
| CBOR codec | √ | × |
| | | × |
| MsgPack codec | √ | × |
| Kryo codec | √ | × |
| FST codec | √ | × |
| LZ4 compression codec | √ | × |
| Snappy compression codec | √ | × |
Redisson支持Java序列化API,以及各种编解码器:
- JSON
- FST
- JDK Serialization
- CBOR
- MsgPack
- Kryo
- Avro
- Smile
- LZ4 compression
- Snappy compression
不幸的是,Jedis不支持JDK序列化或上述任何编解码器。