服务器之家:专注于服务器技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - Java教程 - 详解springboot配置多个redis连接

详解springboot配置多个redis连接

2020-09-13 15:15十丿四 Java教程

Spring Boot为Redis, MongoDB, Elasticsearch, Solr和Gemfire提供自动配置。本文详细介绍了springboot配置多个redis连接,有兴趣的可以了解一下。

一、springboot nosql 简介

Spring Data提供其他项目,用来帮你使用各种各样的NoSQL技术,包括MongoDB, Neo4J, Elasticsearch, Solr, Redis,Gemfire, Couchbase和Cassandra。Spring Boot为Redis, MongoDB, Elasticsearch, Solr和Gemfire提供自动配置。你可以充分利用其他项目,但你需要自己配置它们。

1.1、Redis

Redis是一个缓存,消息中间件及具有丰富特性的键值存储系统。Spring Boot为Jedis客户端库和由Spring Data Redis提供的基于Jedis客户端的抽象提供自动配置。 spring-boot-starter-redis 'Starter POM'为收集依赖提供一种便利的方式。
Redis添加maven依赖

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
   <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

你可以注入一个自动配置的RedisConnectionFactory,StringRedisTemplate或普通的跟其他Spring Bean相同的RedisTemplate实例。默认情况下,这个实例将尝试使用localhost:6379连接Redis服务器。

?
1
2
3
4
5
6
7
8
9
@Component
public class MyBean {
private StringRedisTemplate template;
@Autowired
public MyBean(StringRedisTemplate template) {
this.template = template;
}
// ...
}

如果你添加一个你自己的任何自动配置类型的@Bean,它将替换默认的(除了RedisTemplate的情况,它是根据bean的名称'redisTemplate'而不是它的类型进行排除的)。如果在classpath路径下存在commons-pool2,默认你会获得一个连接池工厂。

1.3 建立多个redis连接

使用redis的默认配置可以连接到redis中的0库中,如果指定库连接需要配置indexdb,同时如果需要连接多个redis服务,也需要同时配置多个数据源

1.3.1、application.yml 文件 中增加:

?
1
2
3
4
5
6
7
8
9
@Component
public class MyBean {
private StringRedisTemplate template;
@Autowired
public MyBean(StringRedisTemplate template) {
this.template = template;
}
// ...
}

1.3.2、创建redisconfiguration

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
@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抽象基类,创建redis的操作方法

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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、根据数据源,创建不同的子类@Component

?
1
2
3
4
5
6
7
8
9
public class Redis123 extends AbRedisConfiguration {
 
  @Resource(name = "redis123Template")
  private StringRedisTemplate temple;
 
  public StringRedisTemplate getTemple() {
    return temple;
  }
}

ps:类和子类中同时声明了getTemple方法和 StringRedisTemple属性,子类通过重写父类的getTeimple方法,把子类的自己StringRedisTemple 属性 传给 父类,父类通过子类传递过来的StringRedisTemple使用不通的数据链接来操作缓存。至此,父类完成所有的操作方法,而当需要创建一个数据库连接时,只需要在创建一个子类,被声明自己的StringRedisTemple,并传给父类即可。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。

原文链接:http://blog.csdn.net/wangqingqi20005/article/details/52613387

延伸 · 阅读

精彩推荐