From 1e3764d82bd9b77a89a7fb88d60dd411ecd4f11b Mon Sep 17 00:00:00 2001 From: liulin <lin.liu@88.com> Date: 星期日, 24 十一月 2024 00:48:18 +0800 Subject: [PATCH] redis统一给key加上前缀实现 --- src/main/java/com/lunhan/xxx/common/cache/CacheManagerConfig.java | 30 +++++++++++++-- src/main/java/com/lunhan/xxx/common/cache/RedisKeySerializer.java | 30 +++++++++++++++ src/main/java/com/lunhan/xxx/common/config/RedisConfig.java | 18 +++++++++ src/main/java/com/lunhan/xxx/common/config/SysConfig.java | 1 src/main/resources/application.yml | 8 ++- 5 files changed, 80 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/lunhan/xxx/common/cache/CacheManagerConfig.java b/src/main/java/com/lunhan/xxx/common/cache/CacheManagerConfig.java index 7e94179..815af08 100644 --- a/src/main/java/com/lunhan/xxx/common/cache/CacheManagerConfig.java +++ b/src/main/java/com/lunhan/xxx/common/cache/CacheManagerConfig.java @@ -8,9 +8,9 @@ import org.springframework.data.redis.cache.RedisCacheConfiguration; import org.springframework.data.redis.cache.RedisCacheManager; import org.springframework.data.redis.connection.RedisConnectionFactory; -import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer; -import org.springframework.data.redis.serializer.RedisSerializationContext; -import org.springframework.data.redis.serializer.StringRedisSerializer; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.data.redis.core.StringRedisTemplate; +import org.springframework.data.redis.serializer.*; import java.time.Duration; @@ -23,7 +23,7 @@ //设置24小时过期 .entryTtl(Duration.ofMillis(ConstantFactory.TIME_LEN_24H)) //设置key的序列化方式 - .serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(new StringRedisSerializer())) + .serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(new RedisKeySerializer())) //设置值的序列化方式 .serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(new GenericJackson2JsonRedisSerializer())); @@ -34,4 +34,26 @@ //返回构造的cacheManager return builder.transactionAware().cacheDefaults(config).build(); } + + @Bean + public StringRedisTemplate stringRedisTemplate(RedisConnectionFactory redisConnectionFactory) { + StringRedisTemplate stringRedisTemplate = new StringRedisTemplate(redisConnectionFactory); + stringRedisTemplate.setKeySerializer(new RedisKeySerializer()); + return stringRedisTemplate; + } + + @Bean + public RedisTemplate<String, Object> objectRedisTemplate(RedisConnectionFactory redisConnectionFactory) { + RedisSerializer<String> serializer = new StringRedisSerializer(); + Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<>(Object.class); + RedisTemplate<String, Object> template = new RedisTemplate<>(); + template.setConnectionFactory(redisConnectionFactory); + template.setKeySerializer(new RedisKeySerializer()); + template.setValueSerializer(jackson2JsonRedisSerializer); + template.setHashKeySerializer(serializer); + template.setHashValueSerializer(jackson2JsonRedisSerializer); + template.afterPropertiesSet(); + + return template; + } } diff --git a/src/main/java/com/lunhan/xxx/common/cache/RedisKeySerializer.java b/src/main/java/com/lunhan/xxx/common/cache/RedisKeySerializer.java new file mode 100644 index 0000000..a1d4655 --- /dev/null +++ b/src/main/java/com/lunhan/xxx/common/cache/RedisKeySerializer.java @@ -0,0 +1,30 @@ +package com.lunhan.xxx.common.cache; + +import com.lunhan.xxx.common.config.SysConfig; +import org.springframework.data.redis.serializer.RedisSerializer; +import org.springframework.lang.Nullable; + +import java.nio.charset.Charset; +import java.nio.charset.StandardCharsets; + +public class RedisKeySerializer implements RedisSerializer<String> { + private static final Charset charset = StandardCharsets.UTF_8; + + /* + * (non-Javadoc) + * @see org.springframework.data.redis.serializer.RedisSerializer#deserialize(byte[]) + */ + @Override + public String deserialize(@Nullable byte[] bytes) { + return (bytes == null ? null : new String(bytes, charset).replaceFirst(SysConfig.redis.getKeyPrefix(), "")); + } + + /* + * (non-Javadoc) + * @see org.springframework.data.redis.serializer.RedisSerializer#serialize(java.lang.Object) + */ + @Override + public byte[] serialize(@Nullable String string) { + return (string == null ? null : (SysConfig.redis.getKeyPrefix() + string).getBytes(charset)); + } +} diff --git a/src/main/java/com/lunhan/xxx/common/config/RedisConfig.java b/src/main/java/com/lunhan/xxx/common/config/RedisConfig.java new file mode 100644 index 0000000..0530571 --- /dev/null +++ b/src/main/java/com/lunhan/xxx/common/config/RedisConfig.java @@ -0,0 +1,18 @@ +package com.lunhan.xxx.common.config; + +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.stereotype.Component; + +@Component +@ConfigurationProperties(prefix = "spring.redis") +public class RedisConfig { + private String keyPrefix; + + public String getKeyPrefix() { + return keyPrefix; + } + + public void setKeyPrefix(String keyPrefix) { + this.keyPrefix = keyPrefix; + } +} diff --git a/src/main/java/com/lunhan/xxx/common/config/SysConfig.java b/src/main/java/com/lunhan/xxx/common/config/SysConfig.java index a5459dd..6a8d4ad 100644 --- a/src/main/java/com/lunhan/xxx/common/config/SysConfig.java +++ b/src/main/java/com/lunhan/xxx/common/config/SysConfig.java @@ -9,6 +9,7 @@ public static JWTConfig jwt = SpringUtil.getBean(JWTConfig.class); public static JdbcSetConfig jdbc = SpringUtil.getBean(JdbcSetConfig.class); public static FileConfig file = SpringUtil.getBean(FileConfig.class); + public static RedisConfig redis = SpringUtil.getBean(RedisConfig.class); public static String getTokenHeader() { return jwt.getTokenHeader(); diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 76a3f73..e7fff72 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -12,14 +12,16 @@ enabled: true #开启文件上传 max-file-size: 10MB #限制文件上传大小为10M mail: - password: ennnntqxzijsdjdh - username: 2413500195@qq.com + password: 123456 + username: 123456@qq.com host: smtp.qq.com default-encoding: UTF-8 + redis: + keyPrefix: xxx_yyy_ # redis缓存key统一加上前缀 jwt: token_header: Token #JWT存储的请求头 - secret: xxx-lunhan-secret #hardware-lunhan-secret #JWT加解密密钥(所有硬件项目通用,公用一个用户中心登录,其他项目不写登录接口,直接用token) + secret: xxx-yyy-secret #hardware-lunhan-secret #JWT加解密密钥(所有硬件项目通用,公用一个用户中心登录,其他项目不写登录接口,直接用token) expiration: 15811200 #JWT的超期限时间(60*60*24*183) 单位:秒 head: 'Bearer ' #JWT负载中拿到开头 -- Gitblit v1.9.3