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

基于SpringBoot2.0默認使用Redis連接池的配置操作

 更新時間:2020年12月02日 16:46:46   作者:幕紫  
這篇文章主要介紹了基于SpringBoot2.0默認使用Redis連接池的配置操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

SpringBoot2.0默認采用Lettuce客戶端來連接Redis服務端的

默認是不使用連接池的,只有配置 redis.lettuce.pool下的屬性的時候才可以使用到redis連接池

 redis:
  cluster:
   nodes: ${redis.host.cluster}
  password: ${redis.password}
  lettuce:
   shutdown-timeout: 100 # 關閉超時時間
   pool:
    max-active: 8 # 連接池最大連接數(使用負值表示沒有限制)
    max-idle: 8 # 連接池中的最大空閑連接
    max-wait: 30 # 連接池最大阻塞等待時間(使用負值表示沒有限制)
    min-idle: 0 # 連接池中的最小空閑連接

沒有這個配置時

增加這個配置時

同時,使用連接池,要依賴commons-pool2

   <dependency>
      <groupId>org.apache.commons</groupId>
      <artifactId>commons-pool2</artifactId>
    </dependency>

如果沒有引入,會報錯

同時如果你想使用jedis客戶端,則需要配置

 redis:
  cluster:
   nodes: ${redis.host.cluster}
  password: ${redis.password}
  jedis:
   pool:
    max-active: 8 # 連接池最大連接數(使用負值表示沒有限制)
    max-idle: 8 # 連接池中的最大空閑連接
    max-wait: 30 # 連接池最大阻塞等待時間(使用負值表示沒有限制)
    min-idle: 0 # 連接池中的最小空閑連接

當然你也可以不配置,走默認的連接池配置,但是有一點要注意

 <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>
 
 <dependency>
  <groupId>redis.clients</groupId>
  <artifactId>jedis</artifactId>
 </dependency>

依賴包的引用里,要去掉lettuce,并且加上jedis的依賴包,否則都是走的lettuce客戶端

同時jedis的客戶端默認增加了pool的連接池依賴包,所以Jedis默認你配置與否都會有連接池,而lettuce則需要配置文件中配置一下

補充知識:解決springboot2 RedisTemplate使用lettuce連接池配置不生效的問題

springboot2 redis默認使用lettuce,使用連接池根據網上的內容,進行如下配置:

# 連接池最大連接數 使用負值表示沒有限制
spring.redis.lettuce.pool.max-active=8
# 連接池最大阻塞等待時間(使用負值表示沒有限制)
spring.redis.lettuce.pool.max-wait=-1
# 連接池中的最大空閑連接 默認 8
spring.redis.lettuce.pool.max-idle=8
# 連接池中的最小空閑連接 默認 0
spring.redis.lettuce.pool.min-idle=0

但是啟動后,多線程調用查詢redis,通過redis-cli的info clients。

發(fā)現連接數并沒有變多。

經過翻閱資料和源碼發(fā)現,LettuceConnectionFactory類里面有個shareNativeConnection變量,默認為true。

說明共享本地連接,這樣的話就不會創(chuàng)建多個連接了,連接池也就沒用了。因此需要把這個值設為false。

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.StringRedisTemplate;
import javax.annotation.Resource;
 
@Configuration
public class RedisConfig {
  @Resource
  private LettuceConnectionFactory lqlcfactory;
  @Bean
  public RedisTemplate redisTemplate(RedisConnectionFactory connectionFactory) {
    RedisTemplate template = new RedisTemplate();
    template.setConnectionFactory(connectionFactory);
    return template;
  }
 
  @Bean
  public StringRedisTemplate stringRedisTemplate(RedisConnectionFactory factory) {
    StringRedisTemplate stringRedisTemplate = new StringRedisTemplate();
    lqlcfactory.setShareNativeConnection(false);
    stringRedisTemplate.setConnectionFactory(lqlcfactory);
    return stringRedisTemplate;
  }
}

這樣lettuce連接池就設置成功了。

為什么改這里就可以了呢?從LettuceConnectionFactory的源碼分析

/*
 * (non-Javadoc)
 * @see org.springframework.data.redis.connection.RedisConnectionFactory#getConnection()
 */
 public RedisConnection getConnection() {
 
 if (isClusterAware()) {
  return getClusterConnection();
 }
 
 LettuceConnection connection;
 connection = doCreateLettuceConnection(getSharedConnection(), connectionProvider, getTimeout(), getDatabase());
 connection.setConvertPipelineAndTxResults(convertPipelineAndTxResults);
 return connection;
 }
protected LettuceConnection doCreateLettuceConnection(
  @Nullable StatefulRedisConnection<byte[], byte[]> sharedConnection, LettuceConnectionProvider connectionProvider,
  long timeout, int database) {
 
 return new LettuceConnection(sharedConnection, connectionProvider, timeout, database);
 }

上面兩個函數是獲取connection連接,可以看到getSharedConnection()和shareNativeConnection配置有關了

@Nullable
 protected StatefulRedisConnection<byte[], byte[]> getSharedConnection() {
 return shareNativeConnection ? (StatefulRedisConnection) getOrCreateSharedConnection().getConnection() : null;
 }

如果是true,就是返回已經存在的連接,如果是false,返回null。那就只能創(chuàng)建新的連接了,如下

LettuceConnection(@Nullable StatefulConnection<byte[], byte[]> sharedConnection,
  LettuceConnectionProvider connectionProvider, long timeout, int defaultDbIndex) {
 
 Assert.notNull(connectionProvider, "LettuceConnectionProvider must not be null.");
 
 this.asyncSharedConn = sharedConnection;
 this.connectionProvider = connectionProvider;
 this.timeout = timeout;
 this.defaultDbIndex = defaultDbIndex;
 this.dbIndex = this.defaultDbIndex;
 }

以上這篇基于SpringBoot2.0默認使用Redis連接池的配置操作就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • 通過openpyxl讀取excel文件過程解析

    通過openpyxl讀取excel文件過程解析

    這篇文章主要介紹了通過openpyxl讀取excel文件過程解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-02-02
  • SpringBoot 快速實現 api 加密的方法

    SpringBoot 快速實現 api 加密的方法

    在項目中,為了保證數據的安全,我們常常會對傳遞的數據進行加密,常用的加密算法包括對稱加密(AES)和非對稱加密(RSA),本文給大家介紹SpringBoot 快速實現 api 加密,感興趣的朋友一起看看吧
    2023-10-10
  • 詳解Java8?CompletableFuture的并行處理用法

    詳解Java8?CompletableFuture的并行處理用法

    Java8中有一個工具非常有用,那就是CompletableFuture,本章主要講解CompletableFuture的并行處理用法,感興趣的小伙伴可以了解一下
    2022-04-04
  • log4j詳細的常用配置說明介紹

    log4j詳細的常用配置說明介紹

    下面看我怎么一步步配置到控制臺的,log4j的輸出級別和輸出模式相信都知道的
    2012-11-11
  • Java之String[] args含義及作用

    Java之String[] args含義及作用

    這篇文章主要介紹了Java之String[] args含義及作用,本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內容,需要的朋友可以參考下
    2021-08-08
  • Java創(chuàng)建并運行線程的方法

    Java創(chuàng)建并運行線程的方法

    這篇文章主要介紹了Java創(chuàng)建并運行線程的方法,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-01-01
  • SpringBoot集成FastDFS實現防盜鏈功能

    SpringBoot集成FastDFS實現防盜鏈功能

    FastDFS是一個高性能的分布式?件系統(tǒng),本文將為大家詳細介紹一下SpringBoot如何集成FastDFS實現防盜鏈功能,感興趣的小伙伴可以跟隨小編一起學習一下
    2025-04-04
  • Spring多數據源導致配置失效的解決

    Spring多數據源導致配置失效的解決

    這篇文章主要介紹了Spring多數據源導致配置失效的解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • java中對象為null時的打印輸出方式

    java中對象為null時的打印輸出方式

    這篇文章主要介紹了java中對象為null時的打印輸出方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • myeclipse智能提示設置的實現方法

    myeclipse智能提示設置的實現方法

    本篇文章介紹了,myeclipse智能提示設置的實現方法。需要的朋友參考下
    2013-05-05

最新評論

蒙自县| 监利县| 绥德县| 北碚区| 承德县| 威信县| 兴化市| 囊谦县| 乌拉特前旗| 儋州市| 合阳县| 枣阳市| 台北县| 鄂托克前旗| 饶河县| 乳山市| 扎鲁特旗| 康保县| 普陀区| 分宜县| 福建省| 海盐县| 卓资县| 罗城| 灵璧县| 清河县| 措美县| 崇礼县| 麟游县| 延庆县| 七台河市| 东光县| 姚安县| 拜泉县| 双柏县| 三都| 黎城县| 五指山市| 西峡县| 东城区| 徐汇区|