成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Redis都要老了,你還在用什么古董客戶端?

存儲 存儲軟件 Redis
前幾日,Redis 創始人 Antirez 在他的個人博客上宣布將結束自己的 Redis 之旅!

本文轉載自微信公眾號「小姐姐味道」,作者小姐姐養的狗。轉載本文請聯系小姐姐味道公眾號。

前幾日,Redis 創始人 Antirez 在他的個人博客上宣布將結束自己的 Redis 之旅!

[[332526]]

大神累了,Redis老了,但Redis依舊很火。

Redis的Java客戶端有很多,比如jedis、redisson、lettuce等。

那大家都在用啥呢?

今天xjjdog做了一個小調查。下面是統計結果。

 

可以看到jedis以絕對的優勢占據了榜首。

下面簡單的分析一小下。

jedis

 

jedis和redis只相差1個字母。我通常把它叫做redis和Java的合體。它有以下特點:

  • 非常的輕量級、簡潔,非常方便進行改造和集成
  • 支持單機、哨兵、Cluster等部署模式,支持事務、pipeline、LUA腳本等。功能齊全。
  • 不支持讀寫分離,需要自己實現
  • 使用了BIO模型,方法調用是同步的
  • jedis客戶端實例不是線程安全的,需要使用連接池來使用
  • 支持連接池

代碼樣例。

  1. Jedis jedis = null
  2. try { 
  3.   jedis = pool.getResource(); 
  4.   /// ... do stuff here ... for example 
  5.   jedis.set("foo""bar"); 
  6.   String foobar = jedis.get("foo"); 
  7.   jedis.zadd("sose", 0, "car"); jedis.zadd("sose", 0, "bike"); 
  8.   Set<String> sose = jedis.zrange("sose", 0, -1); 
  9. } finally { 
  10.   // You have to close jedis object. If you don't close then 
  11.   // it doesn't release back to pool and you can't get a new 
  12.   // resource from pool. 
  13.   if (jedis != null) { 
  14.     jedis.close(); 
  15.   } 
  16. /// ... when closing your application: 
  17. pool.close(); 

redisson

 

我通常把它叫做redis的兒子。由于是兒子,所以有些功能并不支持。

  • 提供分布式鎖等常見的操作封裝,并實現了分布式和可擴展的Java數據結構,但不支持一些基礎的Redis原生功能
  • 基于Netty實現,采用非阻塞IO,性能高。支持異步的請求
  • 不支持事務操作,可以使用LUA腳本實現
  • 支持在主從部署和cluster部署模式下的讀寫分離。在此基礎上,支持讀操作負載均衡
  • api是線程安全的,單個連接可以完成多個操作
  • 可以與Spring Session集成實現會話共享
  • 支持連接池
  • 有中文文檔 O__O

代碼樣例。

  1. // 1. Create config object 
  2. Config config = new Config(); 
  3. config.useClusterServers() 
  4.        // use "rediss://" for SSL connection 
  5.       .addNodeAddress("redis://127.0.0.1:7181"); 
  6.  
  7. // or read config from file 
  8. config = Config.fromYAML(new File("config-file.yaml")); 
  9.  
  10. // 2. Create Redisson instance 
  11.  
  12. // Sync and Async API 
  13. RedissonClient redisson = Redisson.create(config); 
  14.  
  15. // RxJava2 API 
  16. RedissonRxClient redissonRx = Redisson.createRx(config); 
  17.  
  18. // 3. Get Redis based Map 
  19. RMap<MyKey, MyValue> map = redisson.getMap("myMap"); 
  20.  
  21. RMapReactive<MyKey, MyValue> mapReactive = redissonReactive.getMap("myMap"); 
  22.  
  23. RMapRx<MyKey, MyValue> mapRx = redissonRx.getMap("myMap"); 
  24.  
  25. // 4. Get Redis based Lock 
  26. RLock lock = redisson.getLock("myLock"); 
  27.  
  28. RLockReactive lockReactive = redissonReactive.getLock("myLock"); 
  29.  
  30. RLockRx lockRx = redissonRx.getLock("myLock"); 

Lettuce

生菜的意思,應該是圖騰,因為和我想不起和redis的任何聯系。

 

  • 基于Netty框架的事件驅動的通信層,方法調用也是異步的
  • 不需要考慮線程池,性能比較高,Spring生態默認
  • api是線程安全的,單個連接可以完成多個操作
  • 同樣支持連接池

代碼案例。

  1. RedisClient client = RedisClient.create("redis://localhost"); 
  2. StatefulRedisConnection<String, String> connection = client.connect(); 
  3. RedisStringCommands sync = connection.sync(); 
  4. String value = sync.get("key"); 
  5.  
  6. //////////////////// 
  7. StatefulRedisConnection<String, String> connection = client.connect(); 
  8. RedisStringAsyncCommands<String, String> async = connection.async(); 
  9. RedisFuture<String> set = async.set("key""value"
  10. RedisFuture<String> get = async.get("key"
  11.  
  12. async.awaitAll(set, get) == true 
  13.  
  14. set.get() == "OK" 
  15. get.get() == "value" 

小小分析

jedis支持最原生的操作,什么都能干,但是它的表達語義是有限的,可能寫了一堆getset,但是還得靠注釋來明白這段代碼是干啥的。但同時帶來的好處就是可塑性強,可以根據自己的需求把它扭成合適的樣子。另外,jedis還是BIO的,雖然BIO一般來說都比較慢,但是redis本身就是很快的,不會阻塞很久,這個在普通項目里并沒有什么大的問題。

redisson進行了更高級的封裝,功能單一,但可以讓使用者將精力更集中供暖的放在業務邏輯上 ,封裝了很多的輪子。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)。它基于Netty,支持NIO,速度上自然就快一點。我還是通過它實現的一些高級api上知道的它,最著名的就是它的分布式鎖,可以像使用Java的可重入鎖一樣使用它。

Lettuce是生菜的意思,也是Spring的RedisTemplate現在默認的底層實現。比起jedis需要為每個實例創建物理連接來保證線程安全,lettuce確實很優秀。它的性能比較高,支持異步。性能雖然高,但是編程模型比較復雜,不太直觀,很多人不太喜歡。

目前來看,大多數項目還在用著BIO的jedis,這沒什么問題。jedis的功能齊全,api比較初級好定制,性能也能滿足需求。更重要的是,它先入為主,已經成了很多人的標配。

如果在功能上、性能上,已經滿足需求,那又有什么理由去換一個新的呢?是閑的蛋疼么?

羞刀難入鞘,傲劍不回鋒 ?不存在的。

如果有了Spring封裝的這一層,屏蔽了這些蛋疼的切換操作,又有什么理由不換一個快的呢?

 

作者簡介:小姐姐味道 (xjjdog),一個不允許程序員走彎路的公眾號。聚焦基礎架構和Linux。十年架構,日百億流量,與你探討高并發世界,給你不一樣的味道。

 

責任編輯:武曉燕 來源: 小姐姐味道
相關推薦

2012-07-19 10:03:32

2024-11-12 16:28:34

2022-01-19 09:03:01

工具

2009-11-05 13:08:44

WCF客戶端配置

2021-09-22 15:46:29

虛擬桌面瘦客戶端胖客戶端

2011-08-17 10:10:59

2020-03-04 14:05:35

戴爾

2022-09-05 14:36:26

服務端TCP連接

2024-04-11 09:17:51

ArraysJava安全

2010-05-31 10:11:32

瘦客戶端

2011-03-24 13:00:31

配置nagios客戶端

2011-03-02 14:36:24

Filezilla客戶端

2010-12-21 11:03:15

獲取客戶端證書

2011-10-26 13:17:05

2013-07-04 10:01:04

2025-04-02 08:47:23

DOM文檔結構API

2025-06-25 08:10:00

screentmux運維

2023-01-05 07:55:59

Zookeeper服務注冊

2021-08-01 23:18:21

Redis Golang命令

2013-03-20 11:01:37

Redis客戶端連接
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 精品一二区 | 国产久 | 免费在线观看一区二区三区 | 精品欧美一区二区在线观看欧美熟 | 男人的天堂久久 | 免费视频久久 | 久久青草av | 成人美女免费网站视频 | 久久亚洲国产 | 一区二区三区高清 | 国产高清一区二区 | 天天天天操 | 亚洲国产精品久久久 | 亚洲精品久久久久久国产精华液 | 国产一区亚洲二区三区 | 久久亚洲精品国产精品紫薇 | 人人人人干 | 国产视频中文字幕 | 国产黄色在线观看 | 日本欧美国产 | 在线播放亚洲 | 亚洲视频观看 | 久久久久久久久久久成人 | 久久久999精品| 国产精品成人一区二区三区 | 一区二区精品 | 中文字幕视频一区二区 | 在线第一页| 成人欧美| 剑来高清在线观看 | 情侣黄网站免费看 | 久草网视频 | 91精品国产一区二区三区 | 久久中文字幕一区 | 激情91| 亚洲一区二区久久久 | 激情网站在线 | 中文字幕在线免费观看 | 久久国产精品视频 | 阿v视频在线观看 | 国产一区不卡在线观看 |