- Jedis api 在線網(wǎng)址:http://tool.oschina.net/uploads/apidocs/redis/clients/jedis/Jedis.html
- redisson 官網(wǎng)地址:https://redisson.org/ redisson git項(xiàng)目地址:https://github.com/redisson/redisson
- lettuce 官網(wǎng)地址:https://lettuce.io/ lettuce git項(xiàng)目地址:https://github.com/lettuce-io/lettuce-core
首先屋匕,在spring boot2之后龙巨,對(duì)redis連接的支持训堆,默認(rèn)就采用了lettuce。這就一定程度說(shuō)明了lettuce 和Jedis的優(yōu)劣操软。
概念:
Jedis:是老牌的Redis的Java實(shí)現(xiàn)客戶(hù)端请毛,提供了比較全面的Redis命令的支持方仿, Redisson:實(shí)現(xiàn)了分布式和可擴(kuò)展的Java數(shù)據(jù)結(jié)構(gòu)仙蚜。 Lettuce:高級(jí)Redis客戶(hù)端,用于線程安全同步呜师,異步和響應(yīng)使用汁汗,支持集群栗涂,Sentinel戴差,管道和編碼 器暖释。
優(yōu)點(diǎn):
- Jedis:比較全面的提供了Redis的操作特性
- Redisson:促使使用者對(duì)Redis的關(guān)注分離,提供很多分布式相關(guān)操作服務(wù)球匕,例如亮曹,分布式鎖秘症,分布式集合式矫, 可通過(guò)Redis支持延遲隊(duì)列
- Lettuce:基于Netty框架的事件驅(qū)動(dòng)的通信層,其方法調(diào)用是異步的聪廉。
- Lettuce的API是線程安全的故慈,所以 可以操作單個(gè)Lettuce連接來(lái)完成各種操作
可伸縮:
- Jedis:使用阻塞的I/O察绷,且其方法調(diào)用都是同步的拆撼,程序流需要等到sockets處理完I/O才能執(zhí)行情萤,不支持異 步筋岛。Jedis客戶(hù)端實(shí)例不是線程安全的,所以需要通過(guò)連接池來(lái)使用Jedis肪获。
- Redisson:基于Netty框架的事件驅(qū)動(dòng)的通信層孝赫,其方法調(diào)用是異步的红符。Redisson的API是線程安全的,所 以可以操作單個(gè)Redisson連接來(lái)完成各種操作
- Lettuce:基于Netty框架的事件驅(qū)動(dòng)的通信層预侯,其方法調(diào)用是異步的致开。Lettuce的API是線程安全的萎馅,所以 可以操作單個(gè)Lettuce連接來(lái)完成各種操作 lettuce能夠支持redis4,需要java8及以上糜芳。 lettuce是基于netty實(shí)現(xiàn)的與redis進(jìn)行同步和異步的通信飒货。
lettuce和jedis比較:
- jedis使直接連接redis server,如果在多線程環(huán)境下是非線程安全的,這個(gè)時(shí)候只有使用連接池塘辅,為每個(gè) jedis實(shí)例增加物理連接 晃虫;
- lettuce的連接是基于Netty的,連接實(shí)例(StatefulRedisConnection)可以在多個(gè)線程間并發(fā)訪問(wèn)莫辨, StatefulRedisConnection是線程安全的毅访,所以一個(gè)連接實(shí)例可以滿(mǎn)足多線程環(huán)境下的并發(fā)訪問(wèn)喻粹,當(dāng)然這也 是可伸縮的設(shè)計(jì),一個(gè)連接實(shí)例不夠的情況也可以按需增加連接實(shí)例。
- Redisson實(shí)現(xiàn)了分布式和可擴(kuò)展的Java數(shù)據(jù)結(jié)構(gòu)弥喉,和Jedis相比,功能較為簡(jiǎn)單由境,不支持字符串操作虏杰,不支 持排序、事務(wù)勒虾、管道纺阔、分區(qū)等Redis特性。Redisson的宗旨是促進(jìn)使用者對(duì)Redis的關(guān)注分離修然,從而讓使用者 能夠?qū)⒕Ω械胤旁谔幚順I(yè)務(wù)邏輯上笛钝。
總結(jié):
優(yōu)先使用Lettuce,如果需要分布式鎖愕宋,分布式集合等分布式的高級(jí)特性玻靡,添加Redisson結(jié)合使用,因?yàn)?Redisson本身對(duì)字符串的操作支持很差掏婶。 在一些高并發(fā)的場(chǎng)景中啃奴,比如秒殺,搶票雄妥,搶購(gòu)這些場(chǎng)景最蕾,都存在對(duì)核心資源依溯,商品庫(kù)存的爭(zhēng)奪,控制不好瘟则, 庫(kù)存數(shù)量可能被減少到負(fù)數(shù)黎炉,出現(xiàn)超賣(mài)的情況,或者 產(chǎn)生唯一的一個(gè)遞增ID醋拧,由于web應(yīng)用部署在多個(gè)機(jī)器 上慷嗜,簡(jiǎn)單的同步加鎖是無(wú)法實(shí)現(xiàn)的,給數(shù)據(jù)庫(kù)加鎖的話丹壕,對(duì)于高并發(fā)庆械,1000/s的并發(fā),數(shù)據(jù)庫(kù)可能由行鎖變成 表鎖菌赖,性能下降會(huì)厲害缭乘。那相對(duì)而言,redis的分布式鎖琉用,相對(duì)而言堕绩,是個(gè)很好的選擇,redis官方推薦使用 的Redisson就提供了分布式鎖和相關(guān)服務(wù)邑时。