Jedis與Redisson對比
1 概述
1.1. 主要內容
本文的主要內容為對比Redis的兩個框架:Jedis與Redisson,分析各自的優勢與缺點,為專案中Java快取方案中的Redis程式設計模型的選擇提供參考。
2. Jedis與Redisson對比
2.1. 概況對比
Jedis是Redis的Java實現的客戶端,其API提供了比較全面的Redis命令的支援;Redisson實現了分散式和可擴充套件的Java資料結構,和Jedis相比,功能較為簡單,不支援字串操作,不支援排序、事務、管道、分割槽等Redis特性。Redisson的宗旨是促進使用者對Redis的關注分離,從而讓使用者能夠將精力更集中地放在處理業務邏輯上。
2.2. 程式設計模型
Jedis中的方法呼叫是比較底層的暴露的Redis的API,也即Jedis中的Java方法基本和Redis的API保持著一致,瞭解Redis的API,也就能熟練的使用Jedis。而Redisson中的方法則是進行比較高的抽象,每個方法呼叫可能進行了一個或多個Redis方法呼叫。
如下分別為Jedis和Redisson操作的簡單示例:
Jedis設定key-value與set操作:
Jedis jedis = …;
jedis.set("key", "value");
List<String> values = jedis.mget("key", "key2", "key3");
Redisson操作map:
Redisson redisson = …
RMap map = redisson.getMap("my-map"); // implement java.util.Map
map.put("key", "value");
map.containsKey("key");
map.get("key");
2.3. 可伸縮性
Jedis使用阻塞的I/O,且其方法呼叫都是同步的,程式流需要等到sockets處理完I/O才能執行,不支援非同步。Jedis客戶端例項不是執行緒安全的,所以需要通過連線池來使用Jedis。
Redisson使用非阻塞的I/O和基於Netty框架的事件驅動的通訊層,其方法呼叫是非同步的。Redisson的API是執行緒安全的,所以可以操作單個Redisson連線來完成各種操作。
2.4. 資料結構
Jedis僅支援基本的資料型別如:String、Hash、List、Set、Sorted Set。
Redisson不僅提供了一系列的分散式Java常用物件,基本可以與Java的基本資料結構通用,還提供了許多分散式服務,其中包括(BitSet, Set, Multimap, SortedSet, Map, List, Queue, BlockingQueue, Deque, BlockingDeque, Semaphore, Lock, AtomicLong, CountDownLatch, Publish / Subscribe, Bloom filter, Remote service, Spring cache, Executor service, Live Object service, Scheduler service)。
在分散式開發中,Redisson可提供更便捷的方法。
2.5. 第三方框架整合
1 Redisson提供了和Spring框架的各項特性類似的,以Spring XML的名稱空間的方式配置RedissonClient例項和它所支援的所有物件和服務;
2 Redisson完整的實現了Spring框架裡的快取機制;
3 Redisson在Redis的基礎上實現了Java快取標準規範;
4 Redisson為Apache Tomcat叢集提供了基於Redis的非黏性會話管理功能。該功能支援Apache Tomcat的6、7和8版。
5 Redisson還提供了Spring Session會話管理器的實現。