溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

使用springboot如何實(shí)現(xiàn)配置多個(gè)redis連接

發(fā)布時(shí)間:2020-11-17 15:43:44 來源:億速云 閱讀:513 作者:Leah 欄目:編程語言

這篇文章將為大家詳細(xì)講解有關(guān)使用springboot如何實(shí)現(xiàn)配置多個(gè)redis連接,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個(gè)參考,希望大家閱讀完這篇文章后對(duì)相關(guān)知識(shí)有一定的了解。

一、springboot nosql 簡介

Spring Data提供其他項(xiàng)目,用來幫你使用各種各樣的NoSQL技術(shù),包括MongoDB, Neo4J, Elasticsearch, Solr, Redis,Gemfire, Couchbase和Cassandra。Spring Boot為Redis, MongoDB, Elasticsearch, Solr和Gemfire提供自動(dòng)配置。你可以充分利用其他項(xiàng)目,但你需要自己配置它們。

1.1、Redis

Redis是一個(gè)緩存,消息中間件及具有豐富特性的鍵值存儲(chǔ)系統(tǒng)。Spring Boot為Jedis客戶端庫和由Spring Data Redis提供的基于Jedis客戶端的抽象提供自動(dòng)配置。 spring-boot-starter-redis 'Starter POM'為收集依賴提供一種便利的方式。
Redis添加maven依賴

   <dependency> 
  <groupId>org.springframework.boot</groupId> 
  <artifactId>spring-boot-starter-test</artifactId> 
  <scope>test</scope> 
</dependency> 
<dependency> 
  <groupId>org.springframework.boot</groupId> 
  <artifactId>spring-boot-starter</artifactId> 
  <!-- <version>1.3.5.RELEASE</version> --> 
</dependency> 
<!-- https://mvnrepository.com/artifact/org.springframework.data/spring-data-commons --> 
<dependency> 
  <groupId>org.springframework.boot</groupId> 
  <artifactId>spring-boot-starter-redis</artifactId> 
  <!-- <version>1.3.6.RELEASE</version> --> 
</dependency> 

1.2連接Redis

你可以注入一個(gè)自動(dòng)配置的RedisConnectionFactory,StringRedisTemplate或普通的跟其他Spring Bean相同的RedisTemplate實(shí)例。默認(rèn)情況下,這個(gè)實(shí)例將嘗試使用localhost:6379連接Redis服務(wù)器。

@Component 
public class MyBean { 
private StringRedisTemplate template; 
@Autowired 
public MyBean(StringRedisTemplate template) { 
this.template = template; 
} 
// ... 
} 

如果你添加一個(gè)你自己的任何自動(dòng)配置類型的@Bean,它將替換默認(rèn)的(除了RedisTemplate的情況,它是根據(jù)bean的名稱'redisTemplate'而不是它的類型進(jìn)行排除的)。如果在classpath路徑下存在commons-pool2,默認(rèn)你會(huì)獲得一個(gè)連接池工廠。

1.3 建立多個(gè)redis連接

使用redis的默認(rèn)配置可以連接到redis中的0庫中,如果指定庫連接需要配置indexdb,同時(shí)如果需要連接多個(gè)redis服務(wù),也需要同時(shí)配置多個(gè)數(shù)據(jù)源

1.3.1、application.yml 文件 中增加:

@Component 
public class MyBean { 
private StringRedisTemplate template; 
@Autowired 
public MyBean(StringRedisTemplate template) { 
this.template = template; 
} 
// ... 
} 

1.3.2、創(chuàng)建redisconfiguration

@Configuration 
public class Redis137_11Configuration { 
 
  @Bean(name = "redis123Template") 
  public StringRedisTemplate redisTemplate( 
      @Value("${redis123.hostName}") String hostName, 
      @Value("${redis123.port}") int port, 
      @Value("${redis123.password}") String password, 
      @Value("${redis123.maxIdle}") int maxIdle, 
      @Value("${redis123.maxTotal}") int maxTotal, 
      @Value("${redis123.index}") int index, 
      @Value("${redis123.maxWaitMillis}") long maxWaitMillis, 
      @Value("${redis123.testOnBorrow}") boolean testOnBorrow) { 
    StringRedisTemplate temple = new StringRedisTemplate(); 
    temple.setConnectionFactory(connectionFactory(hostName, port, password, 
        maxIdle, maxTotal, index, maxWaitMillis, testOnBorrow)); 
 
    return temple; 
  } 
 
  public RedisConnectionFactory connectionFactory(String hostName, int port, 
      String password, int maxIdle, int maxTotal, int index, 
      long maxWaitMillis, boolean testOnBorrow) { 
    JedisConnectionFactory jedis = new JedisConnectionFactory(); 
    jedis.setHostName(hostName); 
    jedis.setPort(port); 
    if (!StringUtils.isEmpty(password)) { 
      jedis.setPassword(password); 
    } 
    if (index != 0) { 
      jedis.setDatabase(index); 
    } 
    jedis.setPoolConfig(poolCofig(maxIdle, maxTotal, maxWaitMillis, 
        testOnBorrow)); 
    // 初始化連接pool 
    jedis.afterPropertiesSet(); 
    RedisConnectionFactory factory = jedis; 
 
    return factory; 
  } 
 
  public JedisPoolConfig poolCofig(int maxIdle, int maxTotal, 
      long maxWaitMillis, boolean testOnBorrow) { 
    JedisPoolConfig poolCofig = new JedisPoolConfig(); 
    poolCofig.setMaxIdle(maxIdle); 
    poolCofig.setMaxTotal(maxTotal); 
    poolCofig.setMaxWaitMillis(maxWaitMillis); 
    poolCofig.setTestOnBorrow(testOnBorrow); 
    return poolCofig; 
  } 
} 

1.3.3、聲明redis抽象基類,創(chuàng)建redis的操作方法

public abstract class AbRedisConfiguration { 
  protected StringRedisTemplate temple; 
 
  public void setData(String key, String value) { 
    getTemple().opsForValue().set(key, value); 
  } 
 
  public String getData(String key) { 
    return getTemple().opsForValue().get(key); 
  } 
 
  public StringRedisTemplate getTemple() { 
    return temple; 
  } 
} 

1.3.4、根據(jù)數(shù)據(jù)源,創(chuàng)建不同的子類@Component

public class Redis123 extends AbRedisConfiguration { 
 
  @Resource(name = "redis123Template") 
  private StringRedisTemplate temple; 
 
  public StringRedisTemplate getTemple() { 
    return temple; 
  } 
} 

ps:類和子類中同時(shí)聲明了getTemple方法和 StringRedisTemple屬性,子類通過重寫父類的getTeimple方法,把子類的自己StringRedisTemple 屬性 傳給 父類,父類通過子類傳遞過來的StringRedisTemple使用不通的數(shù)據(jù)鏈接來操作緩存。至此,父類完成所有的操作方法,而當(dāng)需要?jiǎng)?chuàng)建一個(gè)數(shù)據(jù)庫連接時(shí),只需要在創(chuàng)建一個(gè)子類,被聲明自己的StringRedisTemple,并傳給父類即可。

關(guān)于使用springboot如何實(shí)現(xiàn)配置多個(gè)redis連接就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI