springboot系列十、springboot整合redis、多redis数据源配置
一、简介
Redis 的数据库的整合在 java 里面提供的官方工具包:jedis,所以即便你现在使用的是 SpringBoot,那么也继续使用此开发包。
二、redidTemplate操作
在 Spring 支持的 Redis 操作之中提供有一个 RedisTemplate 处理程序类,利用这个类可以非常方便的实现 Redis 的各种基本数 据操作。
1、引入依赖
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency>
2、配置yml
spring: redis: host: 47.52.199.52 port: 6379 password: 123456 timeout: 1000 database: 0 jedis: pool: max-active: 4 max-idle: 8 min-idle: 2 max-wait: 100
3、使用示例
@RunWith(SpringRunner.class) @SpringBootTest @WebAppConfiguration public class DemoApplicationTests {
@Resource private RedisTemplate<String, String> redisTemplate; @Test public void testRedis(){ redisTemplate.opsForValue().set("xing","12345678"); System.out.println(redisTemplate.opsForValue().get("xing")); } }
三、配置多个Redis
由于在项目的实际开发过程之中 Redis 的使用会非常的频繁, 那么就有可能出现这样一种问题:现在的项目里面要求连接两 个 Redis 数据库。SpringBoot 里面针对于 Redis 的连接配置本质上只提供有一个连接配置项,那么如果你真的需要进行更多的 Redis 的连接配置,那么就需要自己来进行 Redis 的创建管理了。相当于直接使用spring-data-redis。
1、引入依赖
<dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>2.9.0</version> </dependency>
2、配置yml
spring:
redis-two:
host: 47.52.199.52
port: 6379
password: 123456
timeout: 1000
database: 0
pool:
max-active: 10
max-idle: 8
min-idle: 2
max-wait: 100
3、初始化连接,创建实例
RedisTwoConfig.java
package com.example.demo.config.redisConfig; import org.springframework.beans.factory.annotation.Value; 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.jedis.JedisConnectionFactory; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.serializer.JdkSerializationRedisSerializer; import org.springframework.data.redis.serializer.StringRedisSerializer; import redis.clients.jedis.JedisPoolConfig; @Configuration public class RedisTwoConfig { @Bean("redisTwo") public RedisTemplate<String, Object> getRedisTemplate( @Value("${spring.redis-two.host}") String hostName, @Value("${spring.redis-two.password}") String password, @Value("${spring.redis-two.port}") int port, @Value("${spring.redis-two.database}") int database, @Value("${spring.redis-two.pool.max-active}") int maxActive, @Value("${spring.redis-two.pool.max-idle}") int maxIdle, @Value("${spring.redis-two.pool.min-idle}") int minIdle, @Value("${spring.redis-two.pool.max-wait}") long maxWait) { System.out.println(hostName+port+password); RedisConnectionFactory factory = this.getRedisConnectionFactory( hostName, password, port, maxActive, maxIdle, minIdle, maxWait, database); // 建立Redis的连接 RedisTemplate<String, Object> redisTemplate = new RedisTemplate<String, Object>(); redisTemplate.setConnectionFactory(factory); redisTemplate.setKeySerializer(new StringRedisSerializer()); // key的序列化类型 redisTemplate.setValueSerializer(new JdkSerializationRedisSerializer()); // value的序列化类型 return redisTemplate; } public RedisConnectionFactory getRedisConnectionFactory(String hostName, String password, int port, int maxActive, int maxIdle, int minIdle, long maxWait, int database) { // 是负责建立Factory的连接工厂类 JedisConnectionFactory jedisFactory = new JedisConnectionFactory(); jedisFactory.setHostName(hostName); jedisFactory.setPort(port); jedisFactory.setPassword(password); jedisFactory.setDatabase(database); JedisPoolConfig poolConfig = new JedisPoolConfig(); // 进行连接池配置 poolConfig.setMaxTotal(maxActive); poolConfig.setMaxIdle(maxIdle); poolConfig.setMinIdle(minIdle); poolConfig.setMaxWaitMillis(maxWait); jedisFactory.setPoolConfig(poolConfig); jedisFactory.afterPropertiesSet(); // 初始化连接池配置 return jedisFactory; } }
4、使用示例
@RunWith(SpringRunner.class) @SpringBootTest @WebAppConfiguration public class RedisTest { @Resource private RedisTemplate<String, Object> redisTemplate; @Resource private StringRedisTemplate stringRedisTemplate; @Resource(name = "redisTwo") private RedisTemplate<String, Object> redisTemplate2; @Test public void testRedis2(){ UserPO userPO = new UserPO(); userPO.setAge(25); userPO.setName("小明"); userPO.setUid(111L); redisTemplate2.opsForValue().set("user25",userPO); UserPO result = (UserPO) redisTemplate2.opsForValue().get("user25"); System.out.println(result); } }