From e28b3e94905abf5eed2549d2f062bae0ed7f00e0 Mon Sep 17 00:00:00 2001 From: haoxr <1490493387@qq.com> Date: Mon, 4 Dec 2023 21:39:12 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20Spring=20Boot=20=E6=95=B4=E5=90=88=20Sp?= =?UTF-8?q?ring=20Cache=20=E5=92=8C=20Redis=20=E7=BC=93=E5=AD=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 5 ++ .../system/config/RedisCacheConfig.java | 71 +++++++++++++++++++ .../system/controller/SysRoleController.java | 21 +++--- .../system/mapper/SysUserRoleMapper.java | 8 ++- .../youlai/system/service/SysRoleService.java | 2 +- .../system/service/SysUserRoleService.java | 10 ++- .../service/impl/SysRoleServiceImpl.java | 49 +++++++------ .../service/impl/SysUserRoleServiceImpl.java | 14 +++- src/main/resources/application-dev.yml | 8 +++ src/main/resources/application-prod.yml | 8 +++ .../resources/mapper/SysRoleMenuMapper.xml | 2 +- .../resources/mapper/SysUserRoleMapper.xml | 13 ++++ 12 files changed, 176 insertions(+), 35 deletions(-) create mode 100644 src/main/java/com/youlai/system/config/RedisCacheConfig.java diff --git a/pom.xml b/pom.xml index 9db5828e..d8a89e75 100644 --- a/pom.xml +++ b/pom.xml @@ -90,6 +90,11 @@ spring-boot-starter-data-redis + + org.springframework.boot + spring-boot-starter-cache + + org.springframework.boot spring-boot-starter-aop diff --git a/src/main/java/com/youlai/system/config/RedisCacheConfig.java b/src/main/java/com/youlai/system/config/RedisCacheConfig.java new file mode 100644 index 00000000..2f7bcb98 --- /dev/null +++ b/src/main/java/com/youlai/system/config/RedisCacheConfig.java @@ -0,0 +1,71 @@ +package com.youlai.system.config; + +import org.springframework.boot.autoconfigure.cache.CacheProperties; +import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.cache.annotation.EnableCaching; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.data.redis.cache.RedisCacheConfiguration; +import org.springframework.data.redis.cache.RedisCacheManager; +import org.springframework.data.redis.cache.RedisCacheWriter; +import org.springframework.data.redis.connection.RedisConnectionFactory; +import org.springframework.data.redis.serializer.RedisSerializationContext; +import org.springframework.data.redis.serializer.RedisSerializer; + +/** + * Redis 缓存配置 + * + * @author haoxr + * @since 2023/12/4 + */ +@EnableCaching +@EnableConfigurationProperties(CacheProperties.class) +@Configuration +public class RedisCacheConfig { + + /** + * 自定义 RedisCacheManager + *

+ * 修改 Redis 序列化方式,默认 JdkSerializationRedisSerializer + * + * @param redisConnectionFactory {@link RedisConnectionFactory} + * @param cacheProperties {@link CacheProperties} + * @return {@link RedisCacheManager} + */ + @Bean + public RedisCacheManager redisCacheManager(RedisConnectionFactory redisConnectionFactory, CacheProperties cacheProperties){ + return RedisCacheManager.builder(RedisCacheWriter.nonLockingRedisCacheWriter(redisConnectionFactory)) + .cacheDefaults(redisCacheConfiguration(cacheProperties)) + .build(); + } + + /** + * 自定义 RedisCacheConfiguration + * + * @param cacheProperties {@link CacheProperties} + * @return {@link RedisCacheConfiguration} + */ + @Bean + RedisCacheConfiguration redisCacheConfiguration(CacheProperties cacheProperties) { + + RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig(); + + config = config.serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(RedisSerializer.string())); + config = config.serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(RedisSerializer.json())); + + CacheProperties.Redis redisProperties = cacheProperties.getRedis(); + + if (redisProperties.getTimeToLive() != null) { + config = config.entryTtl(redisProperties.getTimeToLive()); + } + if (!redisProperties.isCacheNullValues()) { + config = config.disableCachingNullValues(); + } + if (!redisProperties.isUseKeyPrefix()) { + config = config.disableKeyPrefix(); + } + config = config.computePrefixWith(name -> name + ":");//覆盖默认key双冒号 CacheKeyPrefix#prefixed + return config; + } + +} diff --git a/src/main/java/com/youlai/system/controller/SysRoleController.java b/src/main/java/com/youlai/system/controller/SysRoleController.java index 46dcfa87..a39d321a 100644 --- a/src/main/java/com/youlai/system/controller/SysRoleController.java +++ b/src/main/java/com/youlai/system/controller/SysRoleController.java @@ -19,6 +19,7 @@ import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.*; import jakarta.validation.Valid; + import java.util.List; @Tag(name = "03.角色接口") @@ -29,7 +30,7 @@ public class SysRoleController { private final SysRoleService roleService; - @Operation(summary = "角色分页列表" ) + @Operation(summary = "角色分页列表") @GetMapping("/page") public PageResult getRolePage( @ParameterObject RolePageQuery queryParams @@ -44,7 +45,7 @@ public class SysRoleController { List