From cb58f0eb2d0b0a07e0b96d7a22fc149ef202afbc Mon Sep 17 00:00:00 2001 From: erdanergou Date: Mon, 15 May 2023 11:53:44 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E7=BA=BF=E7=A8=8B=E6=B1=A0?= =?UTF-8?q?=E5=88=9B=E5=BB=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../security/pool/RedisPool.java | 113 ++++++++++++++++++ 1 file changed, 113 insertions(+) create mode 100644 src/main/java/com/dreamchaser/depository_manage/security/pool/RedisPool.java diff --git a/src/main/java/com/dreamchaser/depository_manage/security/pool/RedisPool.java b/src/main/java/com/dreamchaser/depository_manage/security/pool/RedisPool.java new file mode 100644 index 00000000..a70120d6 --- /dev/null +++ b/src/main/java/com/dreamchaser/depository_manage/security/pool/RedisPool.java @@ -0,0 +1,113 @@ +package com.dreamchaser.depository_manage.security.pool; + +import com.fasterxml.jackson.annotation.JsonAutoDetect; +import com.fasterxml.jackson.annotation.PropertyAccessor; +import com.fasterxml.jackson.databind.ObjectMapper; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Configuration; +import org.springframework.data.redis.connection.RedisStandaloneConfiguration; +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.JdkSerializationRedisSerializer; +import org.springframework.data.redis.serializer.StringRedisSerializer; +import javax.annotation.PostConstruct; +import java.nio.charset.Charset; +import java.nio.charset.StandardCharsets; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@Configuration +public class RedisPool { + //redis地址 + @Value("${redisPool.host}") + private String host; + + //redis端口号 + @Value("${redisPool.port}") + private int port; + + //redis密码 + @Value("${redisPool.password}") + private String password; + + //默认数据库 + private int defaultDB; + + //多个数据库集合 + @Value("${redisPool.dbs}") + private List dbList; + + //RedisTemplate实例 + private static Map> redisTemplateMap = new HashMap<>(); + + /** + * 初始化连接池 + */ + @PostConstruct + public void initRedisTemplate() { + defaultDB = dbList.get(0);//设置默认数据库 + for (Integer db : dbList) { + //存储多个RedisTemplate实例 + redisTemplateMap.put(db, redisTemplate(db)); + } + } + + public LettuceConnectionFactory redisConnection(int db) { + RedisStandaloneConfiguration server = new RedisStandaloneConfiguration(); + server.setHostName(host); // 指定地址 + server.setDatabase(db); // 指定数据库 + server.setPort(port); //指定端口 + server.setPassword(password); //指定密码 + LettuceConnectionFactory factory = new LettuceConnectionFactory(server); + factory.afterPropertiesSet(); //刷新配置 + return factory; + } + + //RedisTemplate模板 + public RedisTemplate redisTemplate(int db) { + + RedisTemplate redisTemplate = new RedisTemplate<>(); + redisTemplate.setConnectionFactory(redisConnection(db)); + + StringRedisSerializer stringRedisSerializer = new StringRedisSerializer(StandardCharsets.UTF_8); + // key 的序列化规则 + redisTemplate.setKeySerializer(stringRedisSerializer); + //String的序列化 + + //key采用String的序列化方式 + redisTemplate.setKeySerializer(stringRedisSerializer); + //hash的key采用String的序列化方式 + redisTemplate.setHashKeySerializer(stringRedisSerializer); + //value序列化方式采用String + redisTemplate.setValueSerializer(stringRedisSerializer); + //hash序列化方式采用String + redisTemplate.setHashValueSerializer(stringRedisSerializer); + + + redisTemplate.afterPropertiesSet(); + + return redisTemplate; + } + + + + /** + * 指定数据库进行切换 + * @param db 数据库索引 + * @return + */ + public RedisTemplate getRedisTemplateByDb(int db) { + return redisTemplateMap.get(db); + } + + /** + * 使用默认数据库 + * + * @return + */ + public RedisTemplate getRedisTemplate() { + return redisTemplateMap.get(defaultDB); + } +}