直接上图 复制注意直接使用包路径 pom导包
<!-- redis --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> </dependency> <dependency> <groupId>com.fasterxml.jackson.datatype</groupId> <artifactId>jackson-datatype-jsr310</artifactId> </dependency>
通过key计算出db
db总数 和存储位置 有些冗余可以自行删除 redis方法进行了一些封装
AbstractRedisConfig类
import com.fasterxml.jackson.annotation.JsonAutoDetect; import com.fasterxml.jackson.annotation.PropertyAccessor; import com.fasterxml.jackson.databind.ObjectMapper; importcom.fasterxml.jackson.databind.SerializationFeature;
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.pool2.impl.GenericObjectPoolConfig;
import org.springframework.data.redis.connection.RedisStandaloneConfiguration;
import org.springframework.data.redis.connection.lettuce.LettuceClientConfiguration;
import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory;
import org.springframework.data.redis.connection.lettuce.LettucePoolingClientConfiguration;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;
import org.springframework.util.StringUtils;
import javax.annotation.PostConstruct;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/** * @Description: TODO */
@Slf4j
public abstract class AbstractRedisConfig {
public int defaultDb = 0;
public int totalDbs = 1;
public Map<Integer, RedisTemplate<String, Object>> redisTemplateMap = new HashMap<>();
private StringRedisTemplate stringRedisTemplate = new StringRedisTemplate();
abstract String getHost();
abstract int getPort();
abstract String getPassword();
abstract int getMaxActive();
abstract int getMaxIdle();
abstract int getMinIdle();
abstract int getMaxWait();
abstract List<Integer> getDbs();
@PostConstruct
public void initRedisTemp() throws Exception {
log.info("############################################################");
log.info("###### START 初始化 Redis{} "+this.getClass().getSimpleName()+"连接池 START ######", this.getHost());
if(StringUtils.isEmpty(getHost())||getHost().equalsIgnoreCase("null")){
log.info("无配置,不需要初始化!");
return;
}
defaultDb = this.getDbs().get(0);
if(this.getDbs().size()==2&&this.getDbs().get(1)!=null){
totalDbs = this.getDbs().get(1);
log.info("init totalDbs : {}",totalDbs);
for (int i = 0;i < totalDbs; i++) {
log.info("###### 正在加载Redis-db-" + i+ " ######");
redisTemplateMap.put(i, getRedisTemplate(i));
}
}else{
log.info("init defaultDb : {}",defaultDb);
redisTemplateMap.put(defaultDb, getRedisTemplate(defaultDb));
}
log.info("###### END 初始化 Redis 连接池 END ######");
log.info("###### START 初始化 Redis-queue{} "+this.getClass().getSimpleName()+"连接池 START ######", this.getHost());
//初始化队列
LettuceConnectionFactory factory = null;
if(totalDbs==1){
log.info("###### 正在加载Redis-queue-db-" + defaultDb + " ######");
factory = getDbFactory(defaultDb);
}else{
log.info("###### 正在加载Redis-queue-db-" + (totalDbs-1) + " ######");
factory = getDbFactory(totalDbs-1);
}
stringRedisTemplate.setConnectionFactory(factory);
stringRedisTemplate.afterPropertiesSet();
log.info("###### END 初始化 Redis-queue 连接池 END ######");
}
private RedisTemplate<String, Object> getRedisTemplate(int dbNo) {
return getRedisTemplate(getDbFactory(dbNo));
}
private LettuceConnectionFactory getDbFactory(int dbNo){
LettuceConnectionFactory factory = new LettuceConnectionFactory(getRedisConfig(dbNo), getClientConfig());
factory.afterPropertiesSet();//必须初始化实例
return factory;
}
private RedisStandaloneConfiguration getRedisConfig(int dbNo) {
RedisStandaloneConfiguration config = new RedisStandaloneConfiguration();
config.setHostName(this.getHost());
config.setPort(this.getPort());
config.setPassword(this.getPassword());
config.setDatabase(dbNo);
return config;
}
private LettuceClientConfiguration getClientConfig() {
GenericObjectPoolConfig poolConfig = new GenericObjectPoolConfig();
poolConfig.setMaxTotal(this.getMaxActive());
poolConfig.setMaxIdle(this.getMaxIdle());
poolConfig.setMinIdle(this.getMinIdle());
poolConfig.setMaxWaitMillis(this.getMaxWait());
return LettucePoolingClientConfiguration.builder().poolConfig(poolConfig).build();
}
private RedisTemplate<String, Object> getRedisTemplate(LettuceConnectionFactory factory) {
RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
redisTemplate.setConnectionFactory(factory);
setSerializer(redisTemplate);
redisTemplate.afterPropertiesSet();
return redisTemplate;
}
public RedisTemplate<String, Object> getRedisTemplateByDb(int db){
return redisTemplateMap.get(db);
}
public StringRedisTemplate getStringRedisTemplate(){
return stringRedisTemplate;
}
public StringRedisTemplate getDefaultStringRedisTemplate(){
if(StringUtils.isEmpty(getHost())||getHost().equalsIgnoreCase("null")){
log.info("无配置,不需要初始化!");
return null;
}
LettuceConnectionFactory factory = null;
if(totalDbs==1){
factory = getDbFactory(defaultDb);
}else{
factory = getDbFactory(totalDbs-1);
}
StringRedisTemplate stringRedisTemplate = new StringRedisTemplate();
stringRedisTemplate.setConnectionFactory(factory);
stringRedisTemplate.afterPropertiesSet();
return stringRedisTemplate;
}
private void setSerializer(RedisTemplate<String, Object> template) {
Jackson2JsonRedisSerializer j2jrs = new Jackson2JsonRedisSerializer(Object.class);
ObjectMapper om = new ObjectMapper();
om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
om.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
om.registerModule(new JavaTimeModule());
om.activateDefaultTyping(om.getPolymorphicTypeValidator(), ObjectMapper.DefaultTyping.NON_FINAL);
j2jrs.setObjectMapper(om);
StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();
// key采用String的序列化方式
template.setKeySerializer(stringRedisSerializer);
// hash的key也采用String的序列化方式
template.setHashKeySerializer(stringRedisSerializer);
// value序列化方式采用jackson
template.setValueSerializer(j2jrs);
// hash的value序列化方式采用jackson
template.setHashValueSerializer(j2jrs);
template.afterPropertiesSet();
}
}
RedisConfig 类
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.core.StringRedisTemplate;
import java.util.List;
/** * Redis配置类 * * @author qy */
@Slf4j
@Configuration
public class RedisConfig extends AbstractRedisConfig{
@Value("${spring.redis.host:null}")
private String host;
@Value("${spring.redis.port:-1}")
private int port;
@Value("${spring.redis.password:null}")
private String password;
@Value("${spring.redis.lettuce.pool.max-active:-1}")
private int maxActive;
@Value("${spring.redis.lettuce.pool.max-idle:-1}")
private int maxIdle;
@Value("${spring.redis.lettuce.pool.min-idle:-1}")
private int minIdle;
@Value("${spring.redis.lettuce.pool.max-wait:-1}")
private int maxWait;
@Value("${spring.redis.dbs:${spring.redis.database:-1}}")
private List<Integer> dbs;
@Bean
public StringRedisTemplate stringRedisTemplate() {
return this.getDefaultStringRedisTemplate();
}
String getHost(){
return this.host;
}
int getPort(){
return this.port;
}
String getPassword(){
return this.password;
}
int getMaxActive(){
return this.maxActive;
}
int getMaxIdle(){
return this.maxIdle;
}
int getMinIdle(){
return this.minIdle;
}
int getMaxWait(){
return this.maxWait;
}
List<Integer> getDbs(){
return this.dbs;
}
}
AbstractRedisUtil类
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.util.CollectionUtils;
import zone.gaohu.utils.config.AbstractRedisConfig;
import java.util.*;
import java.util.concurrent.TimeUnit;
/** * @Description: Redis工具类 */
public abstract class AbstractRedisUtil {
/** * 补全KEY前缀 */
public abstract String fillingKey(String key);
/** * 获取redis初始化信息 */
public abstract int getDbs();
/** * 设置redis数据源 * * @return */
abstract AbstractRedisConfig getRedisConfig();
/** * 获取redis队列 */
public StringRedisTemplate getStringRedisTemplate() {
return this.getRedisConfig().getStringRedisTemplate();
}
// =============================common============================
/** * 指定缓存失效时间 * * @param key 键 * @param time 时间(秒) * @return */
private boolean expire(String key, long time) {
if (time > 0) {
this.getRedisConfig().getRedisTemplateByDb(this.getIndex(key)).expire(key, time, TimeUnit.SECONDS);
}
return true;
}
/** * 根据key 获取过期时间 * * @param key 键 不能为null * @return 时间(秒) 返回0代表为永久有效 */
public long getExpire
标签: jrs1ds过载继电器