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

Jedis那么低性能,還在用?趕緊換上 lettuce 吧!

開發 前端
lettuce的連接是基于Netty的,連接實例(StatefulRedisConnection)可以在多個線程間并發訪問,StatefulRedisConnection是線程安全的,所以一個連接實例可以滿足多線程環境下的并發訪問,當然這也是可伸縮的設計,一個連接實例不夠的情況也可以按需增加連接實例。

在與 知識星球 的球友交流中,最近有很多小伙伴在面大廠, 經常遇到下面的問題:3大redis客戶端:Jedis、Redisson、Lettuce ,如何選型?

今天就來深入聊聊這個問題。

Redis 的3大 Java 客戶端組件

Redis 官方推薦的 Java 客戶端有Jedis、lettuce 和 Redisson。

客戶端組件1:Jedis

Jedis 是老牌的 Redis 的 Java 實現客戶端,提供了比較全面的 Redis 命令的支持、

Jedis 在線網址:http://tool.oschina.net/uploads/apidocs/redis/clients/jedis/Jedis.html

優點:

  • 支持全面的 Redis 操作特性(可以理解為API比較全面)。

缺點:

  • 使用阻塞的 I/O,且其方法調用都是同步的,程序流需要等到 sockets 處理完 I/O 才能執行,不支持異步;
  • Jedis 客戶端實例不是線程安全的,所以需要通過連接池來使用 Jedis。

客戶端組件2:Redisson

Redisson 是一個在 Redis 的基礎上實現的 Java 駐內存數據網格(In-Memory Data Grid)。

Redisson 提供了使用Redis 的最簡單和最便捷的方法。

它不僅提供了一系列的分布式的 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 的宗旨是促進使用者對Redis的關注分離(Separation of Concern),從而讓使用者能夠將精力更集中地放在處理業務邏輯上。

redisson 官網地址:https://redisson.org/

redisson git項目地址:https://github.com/redisson/redisson

優點:

  • 使用者對 Redis 的關注分離,可以類比 Spring 框架,這些框架搭建了應用程序的基礎框架和功能,提升開發效率,讓開發者有更多的時間來關注業務邏輯;
  • 提供很多分布式相關操作服務,例如,分布式鎖,分布式集合,可通過Redis支持延遲隊列等。
  • Redisson基于Netty框架的事件驅動的通信層,其方法調用是異步的。
  • Redisson的API是線程安全的,所以可以操作單個Redisson連接來完成各種操作

缺點:

  • Redisson 對字符串的操作支持比較差。

客戶端組件3:lettuce

lettuce ([?let?s]),是一種可擴展的線程安全的 Redis 客戶端,支持異步模式。

如果避免阻塞和事務操作,如BLPOP和MULTI/EXEC,多個線程就可以共享一個連接。

lettuce 底層基于 Netty,支持高級的 Redis 特性,比如哨兵,集群,管道,自動重新連接和Redis數據模型。

lettuce能夠支持redis4,需要java8及以上。

lettuce是基于netty實現的與redis進行同步和異步的通信。

lettuce 官網地址:https://lettuce.io/

lettuce git項目地址:https://github.com/lettuce-io/lettuce-core

優點:

  • 支持同步異步通信模式;
  • Lettuce 的 API 是線程安全的,如果不是執行阻塞和事務操作,如BLPOP和MULTI/EXEC,多個線程就可以共享一個連接。

lettuce、jedis、Redisson 三者比較

jedis使直接連接redis server,如果在多線程環境下是非線程安全的,這個時候只有使用連接池,為每個jedis實例增加物理連接;

lettuce的連接是基于Netty的,連接實例(StatefulRedisConnection)可以在多個線程間并發訪問,StatefulRedisConnection是線程安全的,所以一個連接實例可以滿足多線程環境下的并發訪問,當然這也是可伸縮的設計,一個連接實例不夠的情況也可以按需增加連接實例。

Jedis 和 lettuce 是比較純粹的 Redis 客戶端,幾乎沒提供什么高級功能。

Jedis 的性能比較差,所以如果你不需要使用 Redis 的高級功能的話,優先推薦使用 lettuce。

Redisson實現了分布式和可擴展的Java數據結構,和Jedis相比,功能較為簡單,不支持字符串操作,不支持排序、事務、管道、分區等Redis特性。

Redisson的宗旨是促進使用者對Redis的關注分離,從而讓使用者能夠將精力更集中地放在處理業務邏輯上。

如果需要分布式鎖,分布式集合等分布式的高級特性,添加Redisson結合使用,因為Redisson本身對字符串的操作支持很差。

Redisson 的優勢是提供了很多開箱即用的 Redis 高級功能,如果你的應用中需要使用到 Redis 的高級功能,建議使用 Redisson。

具體 Redisson 的高級功能可以參考:https://redisson.org/

使用建議

建議:lettuce + Redisson

在spring boot2之后,redis連接默認就采用了lettuce。

就想 spring  的本地緩存,默認使用Caffeine一樣,

這就一定程度說明了,lettuce 比 Jedis在性能的更加優秀。

生產問題

問題1 鏈接斷裂怎么辦?

小伙伴問題1 鏈接斷裂怎么辦?

具體問題:Jedis有心跳 能保持長連接,lettuce好像沒有心跳。阿里ecs 搭的redis tcp長時間沒有傳輸 就會斷開 ,但是lettuce感知不到, 再執行redis請求就會提示鏈接不可用

具體來說,可以通過用netty的空閑檢測機制來維持連接。

注意:是空閑檢測 不是心跳機制。

什么是心跳機制

心跳是在TCP長連接中,客戶端和服務端定時向對方發送數據包通知對方自己還在線,保證連接的有效性的一種機制。在服務器和客戶端之間一定時間內沒有數據交互時, 即處于 idle 狀態時, 客戶端或服務器會發送一個特殊的數據包給對方, 當接收方收到這個數據報文后, 也立即發送一個特殊的數據報文, 回應發送方, 此即一個 PING-PONG 交互.

自然地, 當某一端收到心跳消息后, 就知道了對方仍然在線, 這就確保 TCP 連接的有效性.

空閑檢測 是心跳的基礎機制。

什么是空閑檢測

就是檢測通道中的讀寫數據包,如果一段時間內,沒有收到讀寫數據包,就會出發  IdleStateEvent 空閑狀態事件。

所以,可以借助這個機制,主動關閉 空閑的、被異常斷開的連接。

這就需要大家,熟悉Netty的開發和源碼,關于Netty源碼和開發的內容,請參見《java高并發核心編程卷1加強版》 ,很多小伙伴,就是通過此書掌握的。

最后,奉上問題解決的參考代碼:

import io.lettuce.core.resource.ClientResources;
import io.lettuce.core.resource.NettyCustomizer;
import io.netty.bootstrap.Bootstrap;
import io.netty.channel.Channel;
import io.netty.channel.ChannelDuplexHandler;
import io.netty.channel.ChannelHandlerContext;
import io.netty.handler.timeout.IdleStateEvent;
import io.netty.handler.timeout.IdleStateHandler;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
 
@Configuration
public class ClientConfig {
 
    @Bean
    public ClientResources clientResources(){
 
        NettyCustomizer nettyCustomizer = new NettyCustomizer() {
 
            @Override
            public void afterChannelInitialized(Channel channel) {
                channel.pipeline().addLast(
                        //此處事件必須小于超時時間 
                        new IdleStateHandler(40, 0, 0));
                channel.pipeline().addLast(new ChannelDuplexHandler() {
                    @Override
                    public void userEventTriggered(ChannelHandlerContext ctx, Object evt) throws Exception {
                        if (evt instanceof IdleStateEvent) {
                            ctx.disconnect();
                        }
                    }
                });
            }
 
            @Override
            public void afterBootstrapInitialized(Bootstrap bootstrap) {
 
            }
 
        };
 //替換掉 NettyCustomizer 通道初始化處理器
        return ClientResources.builder().nettyCustomizer(nettyCustomizer ).build();
    }
}

寫在最后

這個組件,是一個新的組件,性能比 jedis 高太多,很多小伙伴一樣用起來了。

責任編輯:武曉燕 來源: 碼猿技術專欄
相關推薦

2023-02-27 08:53:54

JedislettuceRedis

2021-12-06 17:44:56

MHAMySQL高可用

2020-12-07 05:50:54

print()Python代碼

2019-09-21 21:32:34

數據庫SQL分布式

2025-04-02 08:47:23

DOM文檔結構API

2023-01-05 09:33:38

低代碼高性能引擎

2013-04-18 09:43:34

碼農網站網站設計

2012-07-19 10:03:32

2024-06-19 10:01:50

2021-06-10 10:33:22

Jenkins持續集成工具自動化

2024-11-12 16:28:34

2024-03-11 08:21:49

2021-04-21 10:36:47

StringBuildJava8StringJoine

2023-11-20 16:19:02

Redis數據庫

2021-08-16 10:05:57

GitHub代碼開發者

2021-09-17 13:34:57

大數據Redis 應用

2009-12-03 08:57:18

Windows 7圣誕主題

2024-04-11 09:17:51

ArraysJava安全

2021-10-14 18:15:38

BeanUtils對象生成器

2024-06-03 00:00:06

高性能數據傳輸應用程序
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产精品黄视频 | 一二区视频 | 亚洲综合日韩精品欧美综合区 | 97精品超碰一区二区三区 | 亚洲激情视频在线 | 视频一区二区在线观看 | 久久午夜精品 | 久久综合九色综合欧美狠狠 | 天天曰夜夜操 | 久久伊人精品 | 91久久| 亚洲一区二区在线播放 | 亚洲三级在线 | 亚洲第一色av| 日韩在线播放视频 | 国产一区二区在线看 | 热re99久久精品国99热观看 | 在线看亚洲 | 一区二区三区在线观看视频 | 日韩在线一区二区 | 亚洲国产精品久久久久 | 91精品国产色综合久久 | 91精品久久久久久久久 | 黑人精品欧美一区二区蜜桃 | 天天干免费视频 | 国产精品视频一二三区 | 自拍偷拍亚洲一区 | 中文字幕免费在线 | 亚洲成人av | 一区二区av | 日韩一区二区三区精品 | 国产ts人妖系列高潮 | 久久久久久精 | 99久久精品一区二区毛片吞精 | 欧美男人的天堂 | 99综合| 欧美区在线 | 九九综合 | 国产电影一区二区 | 久草热线| av网站在线免费观看 |