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

Spring?Data?Redis切換底層Jedis和Lettuce實(shí)現(xiàn)源碼解析

 更新時(shí)間:2023年11月29日 10:29:54   作者:JavaEdge  
這篇文章主要為大家介紹了Spring?Data?Redis切換底層Jedis和Lettuce實(shí)現(xiàn)方法源碼解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

1 簡(jiǎn)介

Spring Data Redis是 Spring Data 系列的一部分,它提供了Spring應(yīng)用程序?qū)edis的輕松配置和使用。它不僅提供了對(duì)Redis操作的高級(jí)抽象,還支持Jedis和Lettuce兩種連接方式。

可通過(guò)簡(jiǎn)單的配置就能連接Redis,并且可以切換Jedis和Lettuce兩個(gè)連接方式。下面先來(lái)看看我們?cè)撊绾问褂盟?/p>

2 使用

2.1 引入Redis依賴

使用Spring Boot 提供的spring-boot-starter-data-redis依賴

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-data-redis</artifactId>
  <version>3.1.0</version>
</dependency>

2.2 自定義配置類

自定義配置類,用于設(shè)置Key和Value的序列化。

@Configuration
public class RedisTemplateConfig {

    @Bean
    public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
        RedisTemplate<Object, Object> redisTemplate = new RedisTemplate<>();
        redisTemplate.setConnectionFactory(redisConnectionFactory);
        redisTemplate.setKeySerializer(new StringRedisSerializer());
        redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer());
        redisTemplate.setHashKeySerializer(new StringRedisSerializer());
        redisTemplate.setHashValueSerializer(new GenericJackson2JsonRedisSerializer());
        return redisTemplate;
    }
}

2.3 修改Redis連接配置

配置由Spring Boot提供,如果不改,會(huì)使用默認(rèn)配置。支持單節(jié)點(diǎn)、哨兵模式和集群模式,可自由切換。

spring:
  data:
    redis:
      host: localhost
      port: 6379
      database: 1

2.4 使用RedisTemplate

注入RedisTemplate后,就可操作Redis。

RedisTemplate有兩個(gè)泛型:

  • K表示Redis中的Key值類型,一般 String 類型
  • V表示Redis中的Value值類型,V可以是一個(gè)對(duì)象
@SpringBootTest
public class RedisTemplateTest {
    @Resource
    private RedisTemplate<String, String> redisTemplate;
    @Test
    public void test_set() {
        redisTemplate.opsForValue().set("test-key", "test-value");
    }
    @Test
    public void test_get() {
        String value = redisTemplate.opsForValue().get("test-key");
        System.out.println(value);
    }
}

3 源碼分析

從使用來(lái)看,不知道用Jedis or Lettuce或如何切換。

3.1 Redis自動(dòng)配置類:RedisAutoConfiguration

熟悉Spring Boot家族的組件時(shí),一般從它的自動(dòng)配置類開始,Redis自動(dòng)配置類RedisAutoConfiguration:

它引入兩個(gè)連接Redis配置類:

  • Lettuce使用LettuceConnectionConfiguration
  • Jedis使用JedisConnectionConfiguration

3.2 Lettuce連接配置類:LettuceConnectionConfiguration

條件注解控制當(dāng)前配置類能否生效:

  • @ConditionalOnClass:指定一個(gè)或多個(gè)目標(biāo)類,若目標(biāo)類在類路徑下能找到,則當(dāng)前配置類生效;只要有一個(gè)目標(biāo)類未找到,則不生效
  • @ConditionalOnProperty:通過(guò)與配置文件的配置項(xiàng),進(jìn)行匹配來(lái)控制是否生效

這兩個(gè)條件注解,只要有一個(gè)不生效,則當(dāng)前配置類不生效。當(dāng)該配置類生效后,會(huì)使用Lettuce相關(guān)依賴,來(lái)生成一個(gè)RedisConnectionFactory的Bean,用于獲取Redis連接。

package org.springframework.boot.autoconfigure.data.redis;

@Configuration(proxyBeanMethods = false)
@ConditionalOnClass(RedisClient.class)
@ConditionalOnProperty(name = "spring.data.redis.client-type", havingValue = "lettuce", matchIfMissing = true)
class LettuceConnectionConfiguration extends RedisConnectionConfiguration {
  ...
}

io.lettuce.core.RedisClient類能找到,說(shuō)明已引入Lettuce相關(guān)依賴。spring-boot-starter-data-redis確實(shí)就有l(wèi)ettuce-core依賴,即 Spring Data Redis 默認(rèn)用Lettuce。

3.3 Jedis連接配置類:JedisConnectionConfiguration

同理,會(huì)校驗(yàn)類路徑中是否有Jedis相關(guān)依賴類。

同樣該配置類生效后,會(huì)使用Jedis相關(guān)依賴,來(lái)生成一個(gè)RedisConnectionFactory的Bean,用于獲取Redis連接。

該類中還有一個(gè)注解@ConditionalOnMissingBean,用于保證只有一個(gè)RedisConnectionFactoryBean被注入。

redis.clients.jedis.Jedis類未找到,即無(wú)Jedis相關(guān)依賴包,則當(dāng)前配置類無(wú)效。

3.4 如何將連接方式切換為Jedis

有兩種方式,但前提條件是先引入Jedis相關(guān)依賴。

① 利用@ConditionalOnClass注解

排除Lettuce依賴,只保留Jedis依賴。通過(guò)@ConditionalOnClass注解的校驗(yàn),切換成Jedis。

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
    <exclusions>
        <exclusion>
            <groupId>io.lettuce</groupId>
            <artifactId>lettuce-core</artifactId>
        </exclusion>
    </exclusions>
</dependency>

② 利用@ConditionalOnProperty注解

不排除Lettuce的依賴,即這兩種方式的依賴同時(shí)存在。

<dependency>
    <groupId>redis.clients</groupId>
    <artifactId>jedis</artifactId>
</dependency>

通過(guò)@ConditionalOnProperty注解的校驗(yàn),將配置spring.redis.client-type設(shè)為jedis,這樣也可以切換至Jedis方式。

③ 評(píng)估

第一種優(yōu)點(diǎn):不加載多余的依賴包,推薦。

第二種優(yōu)點(diǎn):可通過(guò)修改配置文件,自由切換連接方式。

以上就是Spring Data Redis切換底層Jedis和Lettuce實(shí)現(xiàn)方法示例的詳細(xì)內(nèi)容,更多關(guān)于Spring Data Redis切換Jedis Lettuce的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Java 深入淺出講解代理模式

    Java 深入淺出講解代理模式

    代理模式是Java常見的設(shè)計(jì)模式之一。所謂代理模式是指客戶端并不直接調(diào)用實(shí)際的對(duì)象,而是通過(guò)調(diào)用代理,來(lái)間接的調(diào)用實(shí)際的對(duì)象
    2022-03-03
  • java8使用流的filter來(lái)篩選數(shù)據(jù)的實(shí)現(xiàn)

    java8使用流的filter來(lái)篩選數(shù)據(jù)的實(shí)現(xiàn)

    這篇文章主要介紹了java8使用流的filter來(lái)篩選數(shù)據(jù),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • RocketMQ源碼解析broker?啟動(dòng)流程

    RocketMQ源碼解析broker?啟動(dòng)流程

    這篇文章主要為大家介紹了RocketMQ源碼解析broker啟動(dòng)流程詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-03-03
  • Spring Security6配置方法(廢棄WebSecurityConfigurerAdapter)

    Spring Security6配置方法(廢棄WebSecurityConfigurerAdapter)

    本文主要介紹了Spring Security6配置方法(廢棄WebSecurityConfigurerAdapter),就像文章標(biāo)題所說(shuō)的,SpringSecurity已經(jīng)廢棄了繼承WebSecurityConfigurerAdapter的配置方式,下面就來(lái)詳細(xì)的介紹一下,感興趣的可以了解一下
    2023-12-12
  • springboot冪等切片的實(shí)現(xiàn)

    springboot冪等切片的實(shí)現(xiàn)

    本文主要介紹了springboot冪等切片的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • IDEA2023 配置使用Docker的詳細(xì)教程

    IDEA2023 配置使用Docker的詳細(xì)教程

    這篇文章主要介紹了IDEA2023 配置使用Docker的詳細(xì)教程,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-07-07
  • springboot配置HikariDataSource連接池的兩種方法

    springboot配置HikariDataSource連接池的兩種方法

    本文介紹了在Spring?Boot中配置HikariDataSource連接池的兩種方式,通過(guò)application.yml或application.properties文件可以設(shè)置數(shù)據(jù)庫(kù)連接信息及Hikari連接池參數(shù),感興趣的可以了解一下
    2026-01-01
  • Java中Spring WebSocket詳解

    Java中Spring WebSocket詳解

    本篇文章主要通過(guò)代碼給大家詳細(xì)分析了Java中Spring WebSocket的用法,需要的讀者們參考學(xué)習(xí)下吧。
    2017-12-12
  • SpringBoot任意版本集成Swagger各種版本的操作指南

    SpringBoot任意版本集成Swagger各種版本的操作指南

    在學(xué)習(xí)Swagger生成API文檔的時(shí)候經(jīng)常會(huì)遇到問(wèn)題,而目前市面上大部分技術(shù)分享者的SpringBoot版本并沒(méi)和我們的同步,導(dǎo)致一些一模一樣的代碼,在我們的項(xiàng)目上卻無(wú)法使用,這是一個(gè)經(jīng)常性的問(wèn)題,本文章就旨在和大家搞定SpringBoot任意版本集成Swagger各種版本
    2024-07-07
  • Java中實(shí)現(xiàn)日志記錄的方案總結(jié)

    Java中實(shí)現(xiàn)日志記錄的方案總結(jié)

    在平時(shí)使用到一些軟件中,比如某寶或者某書,通過(guò)記錄用戶的行為來(lái)構(gòu)建和分析用戶的行為數(shù)據(jù),這就需要使用到日志系統(tǒng)來(lái)存儲(chǔ)或者記錄數(shù)據(jù),小編為大家整理了幾種Java日志方案,希望對(duì)大家有所幫助
    2024-12-12

最新評(píng)論

务川| 江孜县| 黎平县| 报价| 濮阳市| 和顺县| 新兴县| 萨嘎县| 平遥县| 密云县| 鱼台县| 崇礼县| 土默特右旗| 西充县| 乐昌市| 宜阳县| 永吉县| 葵青区| 永靖县| 双流县| 元氏县| 田林县| 怀化市| 包头市| 云南省| 桓仁| 汝阳县| 碌曲县| 黑山县| 宿州市| 民丰县| 桃源县| 望江县| 普兰店市| 通榆县| 图片| 赤壁市| 德钦县| 鄂温| 蛟河市| 嘉义县|