pom.xml
...
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
...
application.yml
server:
port: 9891
spring:
redis:
host: 106.xx.xxx.229
port: 6379
password: 123456
具体配置属性在org.springframework.boot.autoconfigure.data.redis.RedisProperties
中
测试代码
@RestController
public class RedisController {
@Autowired
StringRedisTemplate redisTemplate;
@GetMapping(value="/put/")
public String put(){
try{
redisTemplate.opsForValue().set("key1","hello world!");
return redisTemplate.opsForValue().get("key1");
}catch (Exception e){
return e.getMessage();
}
}
@GetMapping(value="/get/")
public String get(){
try{
String mes= redisTemplate.opsForValue().get("key1");
return mes;
}catch (Exception e){
return e.getMessage();
}
}
}
SpringBoot Redis使用
RedisTemplate
- 使用RedisTemplate时对象需要实现序列化接口
- 需要重新配置序列化(默认JdkSerializationRedisSerializer,转化为byte[]redis服务器中不便查看,其它序列化方式在org.springframework.data.redis.serializer包下,存储形式如下)
测试
@GetMapping(value="/put/obj")
public String putList(){
try{
redisTemplate.opsForValue().set("user1",new User("张三","北京"));
return redisTemplate.opsForValue().get("user1").toString();
}catch (Exception e){
return e.getMessage();
}
}
@GetMapping(value="/get/obj")
public String getList(){
try{
User user= (User)redisTemplate.opsForValue().get("user1");
return user.toString();
}catch (Exception e){
return e.getMessage();
}
}
默认
创建配置类自定义序列化类
@Configuration
public class RedisConfig extends CachingConfigurerSupport {
/**
* 配置Jackson2JsonRedisSerializer序列化策略
*/
private Jackson2JsonRedisSerializer<Object> Jackson2JsonSerializer() {
// 使用Jackson2JsonRedisSerializer来序列化和反序列化redis的value值
Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<>(Object.class);
ObjectMapper objectMapper = new ObjectMapper();
// 指定要序列化的域,field,get和set,以及修饰符范围,ANY是都有包括private和public
objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
// 指定序列化输入的类型,类必须是非final修饰的,final修饰的类,比如String,Integer等会跑出异常
objectMapper.activateDefaultTyping(LaissezFaireSubTypeValidator.instance, ObjectMapper.DefaultTyping.NON_FINAL);
jackson2JsonRedisSerializer.setObjectMapper(objectMapper);
return jackson2JsonRedisSerializer;
}
@Bean
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
redisTemplate.setConnectionFactory(redisConnectionFactory);
// 用Jackson2JsonRedisSerializer来序列化和反序列化redis的value值
redisTemplate.setValueSerializer(Jackson2JsonSerializer());
StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();
// 使用StringRedisSerializer来序列化和反序列化redis的key值
redisTemplate.setKeySerializer(stringRedisSerializer);
//其他数据类型略...
redisTemplate.afterPropertiesSet();
return redisTemplate;
}
}
Sentinel 哨兵模式(springboot创建JedisConnectionFactory时会先判断是否是哨兵模式或者集群、最后才是单机模式)
spring:
redis:
timeout: 10000 # 连接超时时间(毫秒)
# 单机模式
# host: 106.xx.xxx.229
# port: 6379
password: 123456
#哨兵模式
sentinel:
#password: 123456
master: mymaster
#两个sentinel
nodes:
- 106.xx.xxx.229:6384
- 106.xx.xxx.229:6383
jedis:
pool:
max-active: 8 # 连接池最大连接数(使用负值表示没有限制)
max-wait: -1 # 连接池最大阻塞等待时间(使用负值表示没有限制)
max-idle: 8 # 连接池中的最大空闲连接
min-idle: 0 # 连接池中的最小空闲连接
private JedisConnectionFactory createJedisConnectionFactory(
ObjectProvider<JedisClientConfigurationBuilderCustomizer> builderCustomizers) {
JedisClientConfiguration clientConfiguration = getJedisClientConfiguration(builderCustomizers);
if (getSentinelConfig() != null) {
return new JedisConnectionFactory(getSentinelConfig(), clientConfiguration);
}
if (getClusterConfiguration() != null) {
return new JedisConnectionFactory(getClusterConfiguration(), clientConfiguration);
}
return new JedisConnectionFactory(getStandaloneConfig(), clientConfiguration);
}