最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringBoot集成Lettuce客戶端操作Redis的實現(xiàn)

 更新時間:2023年11月10日 14:50:15   作者:kerwin_code  
本文主要介紹了SpringBoot集成Lettuce客戶端操作Redis的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

一、前言

spring-boot-starter-data-redis有兩種實現(xiàn) lettuce 和 jedis,spring boot 2的spring-boot-starter-data-redis中,默認(rèn)使用的是lettuce作為redis客戶端,也推薦使用lettuce,它與jedis的主要區(qū)別如下

  • Jedis
    • Jedis是同步的,不支持異步,Jedis客戶端實例不是線程安全的,需要每個線程一個Jedis實例,所以一般通過連接池來使用Jedis.
    • 優(yōu)點
      • 提供了比較全面的 Redis 操作特性的 API
      • API 基本與 Redis 的指令一一對應(yīng),使用簡單易理解
    • 缺點
      • 同步阻塞 IO
      • 不支持異步
      • 線程不安全
  • Lettuce
    • Lettuce是基于Netty框架的事件驅(qū)動的Redis客戶端,其方法調(diào)用是異步的,Lettuce的API也是線程安全的,所以多個線程可以操作單個Lettuce連接來完成各種操作,同時Lettuce也支持連接池.
    • 優(yōu)點
      • 線程安全
      • 基于 Netty 框架的事件驅(qū)動的通信,支持異步和響應(yīng)式編程
      • 適用于分布式緩存
      • 支持集群,Sentinel,管道和編碼器等等功能
    • 缺點
      • API 更抽象,學(xué)習(xí)使用成本高,不過我們基本都使用的RedisTemplate來操作Redis,它抽象了Jedis或者Lettuce客戶端,底層實現(xiàn)我們可以不用關(guān)心

二、基礎(chǔ)集成配置(redis單節(jié)點)

工程結(jié)構(gòu)

2.1、POM

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.12.RELEASE</version>
    </parent>
    
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <!--springboot中的redis依賴-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>
        <!-- lettuce pool 緩存連接池-->
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-pool2</artifactId>
        </dependency>
        <!-- 使用jackson作為redis數(shù)據(jù)序列化 -->
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.11.4</version>
        </dependency>
		<!-- SpringBoot測試包 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

2.2、添加配置文件application.yml

因為我們用的spring-boot-starter-data-redis包會自動配置redis連接,在配置文件中添加對應(yīng)配置即可

spring:
  #redis配置信息
  redis:
    ## Redis數(shù)據(jù)庫索引(默認(rèn)為0)
    database: 0
    ## Redis服務(wù)器地址
    host: 172.16.8.169
    ## Redis服務(wù)器連接端口
    port: 6379
    ## Redis服務(wù)器連接密碼(默認(rèn)為空)
    password: 123456
    ## 連接超時時間(毫秒)
    timeout: 1200
    lettuce:
      pool:
        ## 連接池最大連接數(shù)(使用負(fù)值表示沒有限制)
        max-active: 8
        ## 連接池最大阻塞等待時間(使用負(fù)值表示沒有限制)
        max-wait: -1
        ## 連接池中的最大空閑連接
        max-idle: 8
        ## 連接池中的最小空閑連接
        min-idle: 1

2.3、編寫配置文件

這里需要添加一個RedisTemplate的bean,設(shè)置這個RedisTemplate序列化方式為jackson

import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.PropertyAccessor;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.*;
import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;

@Configuration
public class RedisConfig{
    /**
     * retemplate相關(guān)配置
     */
    @Bean
    public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {
        RedisTemplate<String, Object> template = new RedisTemplate<>();
        // 配置連接工廠
        template.setConnectionFactory(factory);
        //使用Jackson2JsonRedisSerializer來序列化和反序列化redis的value值(默認(rèn)使用JDK的序列化方式)
        Jackson2JsonRedisSerializer jacksonSeial = new Jackson2JsonRedisSerializer(Object.class);
        ObjectMapper om = new ObjectMapper();
        // 指定要序列化的域,field,get和set,以及修飾符范圍,ANY是都有包括private和public
        om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
        // 指定序列化輸入的類型,類必須是非final修飾的,final修飾的類,比如String,Integer等會跑出異常
        om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
        jacksonSeial.setObjectMapper(om);
        // 值采用json序列化
        template.setValueSerializer(jacksonSeial);
        //使用StringRedisSerializer來序列化和反序列化redis的key值
        template.setKeySerializer(new StringRedisSerializer());
        // 設(shè)置hash key 和value序列化模式
        template.setHashKeySerializer(new StringRedisSerializer());
        template.setHashValueSerializer(jacksonSeial);
        template.afterPropertiesSet();
        return template;
    }
}

2.4、編寫啟動類

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class LettuceApplication {
    public static void main(String[] args) {
        SpringApplication.run(LettuceApplication.class);
    }
}

2.5、編寫測試類測試是否連接成功

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.test.context.junit4.SpringRunner;

@RunWith(SpringRunner.class)
@SpringBootTest(classes =  LettuceApplication.class)
public class LettuceTest {
    @Autowired
    private RedisTemplate<String,Object> redisTemplate;
    @Test
    public void t1(){
        String key = "key1";
        System.out.println("插入數(shù)據(jù)到redis");
        redisTemplate.opsForValue().set(key,"value1");
        Object value = redisTemplate.opsForValue().get(key);
        System.out.println("從redis中獲取到值為 "+value);
        Boolean delete = redisTemplate.delete(key);
        System.out.println("刪除redis中值 "+delete);
    }
}

到此這篇關(guān)于SpringBoot集成Lettuce客戶端操作Redis的實現(xiàn)的文章就介紹到這了,更多相關(guān)SpringBoot Lettuce操作Redis內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java中List集合按指定條件排序

    Java中List集合按指定條件排序

    這篇文章主要介紹了Java中List集合按指定條件排序,List是一種有序集合,可以隨時添加和刪除其中元素,本篇文章針對List集合按照條件排序的幾種方式做了實例演示,需要的朋友可以參考下
    2023-07-07
  • 深入理解Spring中RabbitMQ的Channel

    深入理解Spring中RabbitMQ的Channel

    這篇文章主要介紹了深入理解Spring中RabbitMQ的Channel,在RabbitMq中,channel表示邏輯連接或者叫虛擬連接,是棣屬于TCP連接的,一個TCP連接里可以創(chuàng)建多個channel,在Rabbit MQ里,消息的發(fā)送和接收都是基于channel的,需要的朋友可以參考下
    2023-08-08
  • springboot靜態(tài)資源映射規(guī)則的使用小結(jié)

    springboot靜態(tài)資源映射規(guī)則的使用小結(jié)

    本文主要介紹了springboot靜態(tài)資源映射規(guī)則,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2025-12-12
  • java 加密之RSA算法加密與解密的實例詳解

    java 加密之RSA算法加密與解密的實例詳解

    這篇文章主要介紹了java 加密之RSA算法加解密與解密的實例詳解的相關(guān)資料,需要的朋友可以參考下
    2017-07-07
  • JavaEE在線人數(shù)管理系統(tǒng)

    JavaEE在線人數(shù)管理系統(tǒng)

    這篇文章主要為大家分享了JavaEE在線人數(shù)管理系統(tǒng),顯示在線人數(shù)、在線人詳細(xì)信息、管理員踢人等功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-09-09
  • java 對象參數(shù)去空格方式代碼實例

    java 對象參數(shù)去空格方式代碼實例

    這篇文章主要介紹了java 對象參數(shù)去空格方式代碼實例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-10-10
  • 深入淺析JDK8新特性之Lambda表達(dá)式

    深入淺析JDK8新特性之Lambda表達(dá)式

    Lambda表達(dá)式主要是替換了原有匿名內(nèi)部類的寫法,也就是簡化了匿名內(nèi)部類的寫法。這篇文章主要介紹了JDK8新特性之Lambda表達(dá)式,非常不錯感興趣的朋友參考下吧
    2016-10-10
  • SpringBoot 創(chuàng)建對象常見的幾種方式小結(jié)

    SpringBoot 創(chuàng)建對象常見的幾種方式小結(jié)

    Spring Boot中創(chuàng)建對象的幾種常見方式包括使用@Component、@Service、@Repository或@Controller注解,本文就來詳細(xì)的介紹一下,感興趣的可以了解一下
    2024-11-11
  • Java Socket實現(xiàn)猜數(shù)字小游戲

    Java Socket實現(xiàn)猜數(shù)字小游戲

    這篇文章主要為大家詳細(xì)介紹了Java Socket實現(xiàn)猜數(shù)字小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-09-09
  • SpringBoot使用ApplicationEvent&Listener完成業(yè)務(wù)解耦

    SpringBoot使用ApplicationEvent&Listener完成業(yè)務(wù)解耦

    這篇文章主要介紹了SpringBoot使用ApplicationEvent&Listener完成業(yè)務(wù)解耦示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-05-05

最新評論

张掖市| 冕宁县| 上杭县| 长白| 津南区| 石棉县| 广东省| 安阳市| 南华县| 营山县| 盈江县| 中山市| 甘泉县| 克拉玛依市| 绍兴市| 格尔木市| 海阳市| 广平县| 黔西县| 抚远县| 台东县| 宁阳县| 调兵山市| 平定县| 临清市| 太湖县| 遵义县| 东港市| 邵东县| 林芝县| 泊头市| 老河口市| 文成县| 通城县| 庆安县| 慈利县| 岳西县| 景德镇市| 遵义县| 赤水市| 班戈县|