package com.shunnengnet.inspect.common.config;
import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.PropertyAccessor;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;
import javax.annotation.Resource;
import java.io.Serializable;
@Configuration
public class RedisConfig {
@Resource
private RedisTemplate redisTemplate;
public RedisTemplate setDataBase(int num) {
LettuceConnectionFactory connectionFactory = (LettuceConnectionFactory) redisTemplate.getConnectionFactory();
if (connectionFactory != null && num != connectionFactory.getDatabase()) {
connectionFactory.setDatabase(num);
this.redisTemplate.setConnectionFactory(connectionFactory);
connectionFactory.resetConnection();
connectionFactory.afterPropertiesSet();
}
return redisTemplate;
}
/**
* 序列化注入spring容器的RedisTemplate
*
* @return
*/
@Bean
public RedisTemplate<Serializable, Object> getRedisTemplate() {
Jackson2JsonRedisSerializer serializer = new Jackson2JsonRedisSerializer(Object.class);
ObjectMapper mapper = new ObjectMapper();
mapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
// mapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
serializer.setObjectMapper(mapper);
//使用StringRedisSerializer来序列化和反序列化redis的key值
redisTemplate.setKeySerializer(new StringRedisSerializer());
redisTemplate.setValueSerializer(serializer);
redisTemplate.setHashKeySerializer(new StringRedisSerializer());
redisTemplate.setHashValueSerializer(new StringRedisSerializer());
redisTemplate.afterPropertiesSet();
// redisTemplate.setEnableTransactionSupport(true);
return redisTemplate;
}
}
package com.shunnengnet.inspect.common.util;
import com.shunnengnet.inspect.common.config.RedisConfig;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.io.Serializable;
@Component
public class RedisUtil {
@Resource
private RedisConfig redisConfig;
/**
* 根据db获取对应的redisTemplate实例
*
* @param db
* @return redisTemplate实例
*/
public RedisTemplate<Serializable, Object> getRedisTemplateByDb(final int db) {
return redisConfig.setDataBase(db);
}
}
测试
@GetMapping("/saveRedisSch")
public ApiRestResult<String> saveRedisSch() {
RedisTemplate<Serializable, Object> redisTemplateByDb = redisUtil.getRedisTemplateByDb(10);
LambdaQueryWrapper<InspectMealScheduleSource> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.eq(InspectMealScheduleSource::getIsDeleted, "0");
List<InspectMealScheduleSource> list = inspectMealScheduleSourceService
.list(lambdaQueryWrapper);
if (null != list && !list.isEmpty()) {
list.forEach(item -> {
redisTemplateByDb.opsForValue().set(SCHEDULE_SOURCE + item.getId(), item.getRestNum());
});
}
return ApiRestResult.ok();
}