pom.xml引入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
application.properties中配置:
# Redis服务器地址(默认session使用)
spring.redis.host=172.17.0.2
# Redis服务器连接密码(默认为空)
spring.redis.password=lovecto
# Redis服务器连接端口
spring.redis.port=6390
# Redis数据库索引(默认为0)
spring.redis.database=0
# 连接池最大连接数(使用负值表示没有限制)
spring.redis.pool.max-active=8
# 连接池最大阻塞等待时间(使用负值表示没有限制)
spring.redis.pool.max-wait=-1
# 连接池中的最大空闲连接
spring.redis.pool.max-idle=8
# 连接池中的最小空闲连接
spring.redis.pool.min-idle=0
# 连接超时时间(毫秒)
spring.redis.timeout=3000
添加一个RedisTemplate的子类,用于针对redis的操作,不使用springboot默认的RedisTemplate。springboot默认的RedisTemplate参考org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration。使用下面的CustomRedisTemplate覆盖默认的RedisTemplate主要是为了可以自定义一些序列化方式,不使用默认的序列化方式。
package cn.lovecto.promotion.cache;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.RedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;
/**
* 自定义redis模板
*
*/
public class CustomRedisTemplate extends RedisTemplate<String, Object>{
/**
* 默认的自定义序列号方式,key为字符串
* @param connectionFactory
*/
public CustomRedisTemplate(RedisConnectionFactory connectionFactory) {
RedisSerializer<String> stringSerializer = new StringRedisSerializer();
setKeySerializer(stringSerializer);
setHashKeySerializer(stringSerializer);
setConnectionFactory(connectionFactory);
afterPropertiesSet();
}
/**
* 自定义redis模板,key为字符串
* @param connectionFactory 连接工厂
* @param valueSerializer 值序列化方式
*/
public CustomRedisTemplate(RedisConnectionFactory connectionFactory, RedisSerializer<Object> valueSerializer){
RedisSerializer<String> stringSerializer = new StringRedisSerializer();
setKeySerializer(stringSerializer);
setHashKeySerializer(stringSerializer);
setConnectionFactory(connectionFactory);
setValueSerializer(valueSerializer);
setHashValueSerializer(valueSerializer);
afterPropertiesSet();
}
}
CustomRedisTemplate类中,如果不指定值的序列化方式则使用默认序列化方式,否则使用指定的序列化方式,但不管怎么样,key的序列化都使用String.
redis的配置类如下RedisConfig:
package cn.lovecto.promotion.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import cn.lovecto.promotion.cache.CustomRedisTemplate;
@Configuration
public class RedisConfig {
@Bean(name = "redisTemplate")
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory){
CustomRedisTemplate template = new CustomRedisTemplate(factory);
return template;
}
}
测试代码如下:
@Autowired
private RedisTemplate<String, Object> redisTemplate;
@Test
public void test(){
String key = "sean.promotion.test";
redisTemplate.opsForValue().set(key, "12345");
System.out.println(redisTemplate.opsForValue().get(key));
}
总结:使用字符串作为key可以见名知意,也便于运维的一些操作,否则将可能使用jdk默认的序列化方式,不利于运维。本文基于springboot2.0.1.RELEASE
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.1.RELEASE</version>
</parent>