1. 程式人生 > >Jedis與Redisson對比

Jedis與Redisson對比

1  概述

1.1.       主要內容

本文的主要內容為對比Redis的兩個框架:Jedis與Redisson,分析各自的優勢與缺點,為專案中Java快取方案中的Redis程式設計模型的選擇提供參考。

2.    JedisRedisson對比

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會話管理器的實現。