From babfa6a8ca90cd98a467f22296b77b9536987f1d Mon Sep 17 00:00:00 2001 From: GYJ <1157756119@qq.com> Date: Mon, 10 Feb 2025 14:24:21 +0800 Subject: [PATCH] =?UTF-8?q?cache=20manager=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cash-api/api-config/pom.xml | 6 +++ .../main/java/com/czg/config/CacheConfig.java | 43 +++++++++++++++++++ .../main/java/com/czg/SystemApplication.java | 2 - .../czg/config/FastJson2RedisSerializer.java | 38 ++++++++++++++++ 4 files changed, 87 insertions(+), 2 deletions(-) create mode 100644 cash-api/api-config/src/main/java/com/czg/config/CacheConfig.java create mode 100644 cash-common/cash-common-redis/src/main/java/com/czg/config/FastJson2RedisSerializer.java diff --git a/cash-api/api-config/pom.xml b/cash-api/api-config/pom.xml index 5f077a7b8..619b01ab6 100644 --- a/cash-api/api-config/pom.xml +++ b/cash-api/api-config/pom.xml @@ -28,6 +28,12 @@ com.czg cash-common-tools + + + com.czg + cash-common-redis + 1.0.0 + diff --git a/cash-api/api-config/src/main/java/com/czg/config/CacheConfig.java b/cash-api/api-config/src/main/java/com/czg/config/CacheConfig.java new file mode 100644 index 000000000..036132d71 --- /dev/null +++ b/cash-api/api-config/src/main/java/com/czg/config/CacheConfig.java @@ -0,0 +1,43 @@ +package com.czg.config; + +import org.springframework.cache.CacheManager; +import org.springframework.cache.annotation.EnableCaching; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Primary; +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.StringRedisSerializer; + +import java.time.Duration; + + +/** + * @author GYJoker + */ +@Configuration +@EnableCaching +public class CacheConfig { + + @Bean(name = "redisCacheManager") + @Primary + public CacheManager cacheManager(RedisConnectionFactory redisConnectionFactory) { + // 使用自定义的 FastJson2RedisSerializer 进行值的序列化 + FastJson2RedisSerializer fastJson2RedisSerializer = new FastJson2RedisSerializer<>(Object.class); + + // 配置 Redis 缓存的默认配置 + RedisCacheConfiguration cacheConfiguration = RedisCacheConfiguration.defaultCacheConfig() + // 设置键的序列化方式 + .serializeKeysWith(org.springframework.data.redis.serializer.RedisSerializationContext.SerializationPair.fromSerializer(new StringRedisSerializer())) + // 设置值的序列化方式,使用 Fastjson2 序列化 + .serializeValuesWith(org.springframework.data.redis.serializer.RedisSerializationContext.SerializationPair.fromSerializer(fastJson2RedisSerializer)) + // 设置缓存过期时间为 30 分钟 + .entryTtl(Duration.ofMinutes(30)); + + // 创建 Redis 缓存管理器 + return RedisCacheManager.builder(redisConnectionFactory) + .cacheDefaults(cacheConfiguration) + .build(); + } +} diff --git a/cash-api/system-server/src/main/java/com/czg/SystemApplication.java b/cash-api/system-server/src/main/java/com/czg/SystemApplication.java index 935428776..059326575 100644 --- a/cash-api/system-server/src/main/java/com/czg/SystemApplication.java +++ b/cash-api/system-server/src/main/java/com/czg/SystemApplication.java @@ -3,13 +3,11 @@ package com.czg; import org.mybatis.spring.annotation.MapperScan; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.cache.annotation.EnableCaching; import org.springframework.cloud.client.discovery.EnableDiscoveryClient; /** * @author ww */ -@EnableCaching @SpringBootApplication @EnableDiscoveryClient @MapperScan("com.czg.service.system.mapper") diff --git a/cash-common/cash-common-redis/src/main/java/com/czg/config/FastJson2RedisSerializer.java b/cash-common/cash-common-redis/src/main/java/com/czg/config/FastJson2RedisSerializer.java new file mode 100644 index 000000000..c42e630e4 --- /dev/null +++ b/cash-common/cash-common-redis/src/main/java/com/czg/config/FastJson2RedisSerializer.java @@ -0,0 +1,38 @@ +package com.czg.config; + +import com.alibaba.fastjson2.JSON; +import com.alibaba.fastjson2.JSONReader; +import com.alibaba.fastjson2.JSONWriter; +import org.springframework.data.redis.serializer.RedisSerializer; +import org.springframework.data.redis.serializer.SerializationException; + +import java.nio.charset.StandardCharsets; + +/** + * @author GYJoker + */ +public class FastJson2RedisSerializer implements RedisSerializer { + + private final Class clazz; + + public FastJson2RedisSerializer(Class clazz) { + this.clazz = clazz; + } + + @Override + public byte[] serialize(T t) throws SerializationException { + if (t == null) { + return new byte[0]; + } + return JSON.toJSONString(t, JSONWriter.Feature.WriteClassName).getBytes(StandardCharsets.UTF_8); + } + + @Override + public T deserialize(byte[] bytes) throws SerializationException { + if (bytes == null || bytes.length == 0) { + return null; + } + String str = new String(bytes, StandardCharsets.UTF_8); + return JSON.parseObject(str, clazz, JSONReader.Feature.SupportAutoType); + } +}