springboot整合redis、redisson
springboot整合redis、redisson
springboot整合redis
依赖
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> </dependency> <!-- json --> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.66</version> </dependency>
配置文件
redis.properties
#Redis服务器地址 spring.redis.host=192.168.3.106 #集群连接 #spring.redis.cluster.nodes=192.168.3.106:6379,192.168.3.107:6379,192.168.3.108:6379,192.168.3.109:6379,192.168.3.110:6379,192.168.3.111:6379 #Redis服务器连接端口 spring.redis.port=6379 #Redis数据库索引(默认为0) spring.redis.database= 0 #用户名 spring.redis.username= #密码 spring.redis.password= #连接超时时间(毫秒) spring.redis.timeout=1800000 #连接池最大连接数(使用负值表示没有限制) spring.redis.lettuce.pool.max-active=20 #最大阻塞等待时间(负数表示没限制) spring.redis.lettuce.pool.max-wait=-1 #连接池中的最大空闲连接 spring.redis.lettuce.pool.max-idle=10 #连接池中的最小空闲连接 spring.redis.lettuce.pool.min-idle=0
配置类
/** redis配置类
 * @author Admin
 *
 */
@Configuration
@PropertySource(value = {
          
   "classpath:redis.properties"},encoding = "utf-8")
public class RedisConfig {
          
   
	@Bean
	public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory){
          
   
		RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
		redisTemplate.setConnectionFactory(factory);
		redisTemplate.setKeySerializer(new StringRedisSerializer());
		redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer());
		redisTemplate.setHashKeySerializer(new StringRedisSerializer());
		redisTemplate.setHashValueSerializer(new GenericJackson2JsonRedisSerializer());
		return redisTemplate;
	}
	
	@Bean
	public StringRedisTemplate stringRedisTemplate(RedisConnectionFactory factory) {
          
   
		StringRedisTemplate template = new StringRedisTemplate();
		template.setConnectionFactory(factory);
		template.setKeySerializer(new StringRedisSerializer());
		template.setValueSerializer(new GenericJackson2JsonRedisSerializer());
		template.setHashKeySerializer(new StringRedisSerializer());
		template.setHashValueSerializer(new GenericJackson2JsonRedisSerializer());
		return template;
	}
} 
配置解析
根据springboot自动配置原理,查看spring-boot-autoconfigure-2.4.3下的spring.factories文件 搜索redis相关配置 找到redisAutoconfiguration 查看该类的源码 发现redisAutoconfiguration 帮我们配置了RedisTemplate<Object, Object> 和 StringRedisTemplate 所以正常情况下我们不需要重新配置这两个类,通过查看RedisTemplate 源码 看到默认采用jdk的序列化方式 打上断点 发现实际上采用的是StringRedisSerializer ,在插入数据时会出现乱码情况 因此如果我们需要看到明文,需要重新设置序列化,RedisTemplate 源码中有这个属性 它的实现类如下 我们采用GenericJackson2JsonRedisSerializer这个序列化方式。具体配置在上面的配置类上。
在redisAutoconfiguration源码中有着 @EnableConfigurationProperties(RedisProperties.class) 查看RedisProperties.class 源码 因此需要定义一个redis的配置文件,把属性定义为spring.redis开头即可,然后通过@PropertySource注解导入该配置,这样可以解决application.yml过于臃肿的问题,当然也可以直接在application.yml上直接配置。
使用
在需要使用的redis的地方引入redisTemplate 调用相关api即可
@Resource private RedisTemplate<String, Object> redisTemplate;
