From 20c6e51a383dbddf5739a8c5026813efb3160d39 Mon Sep 17 00:00:00 2001 From: stylefeng Date: Tue, 14 Jan 2025 18:17:09 +0800 Subject: [PATCH] =?UTF-8?q?=E3=80=908.3.3=E3=80=91=E3=80=90file=E3=80=91?= =?UTF-8?q?=E3=80=90cache=E3=80=91=E5=88=9D=E5=A7=8B=E5=8C=96=E6=96=87?= =?UTF-8?q?=E4=BB=B6=E4=BF=A1=E6=81=AF=E7=9A=84=E7=BC=93=E5=AD=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../file/api/constants/FileConstants.java | 12 ++++ kernel-d-file/file-business/pom.xml | 14 +++++ .../modular/cache/FileInfoMemoryCache.java | 27 +++++++++ .../modular/cache/FileInfoRedisCache.java | 27 +++++++++ .../service/impl/SysFileInfoServiceImpl.java | 4 ++ .../file-spring-boot-starter/pom.xml | 14 +++++ .../FileMemoryCacheAutoConfiguration.java | 59 +++++++++++++++++++ .../FileRedisCacheAutoConfiguration.java | 59 +++++++++++++++++++ .../main/resources/META-INF/spring.factories | 4 +- 9 files changed, 219 insertions(+), 1 deletion(-) create mode 100644 kernel-d-file/file-business/src/main/java/cn/stylefeng/roses/kernel/file/modular/cache/FileInfoMemoryCache.java create mode 100644 kernel-d-file/file-business/src/main/java/cn/stylefeng/roses/kernel/file/modular/cache/FileInfoRedisCache.java create mode 100644 kernel-d-file/file-spring-boot-starter/src/main/java/cn/stylefeng/roses/kernel/file/starter/cache/FileMemoryCacheAutoConfiguration.java create mode 100644 kernel-d-file/file-spring-boot-starter/src/main/java/cn/stylefeng/roses/kernel/file/starter/cache/FileRedisCacheAutoConfiguration.java diff --git a/kernel-d-file/file-api/src/main/java/cn/stylefeng/roses/kernel/file/api/constants/FileConstants.java b/kernel-d-file/file-api/src/main/java/cn/stylefeng/roses/kernel/file/api/constants/FileConstants.java index ef961e658..af77233b8 100644 --- a/kernel-d-file/file-api/src/main/java/cn/stylefeng/roses/kernel/file/api/constants/FileConstants.java +++ b/kernel-d-file/file-api/src/main/java/cn/stylefeng/roses/kernel/file/api/constants/FileConstants.java @@ -82,4 +82,16 @@ public interface FileConstants { */ String DEFAULT_AVATAR_FILE_OBJ_NAME = "defaultAvatar.png"; + //-------------------------------缓存相关------------------------------- + + /** + * 文件信息缓存的前缀 + */ + String FILE_INFO_CACHE_NAME_PREFIX = "FILE_INFO:"; + + /** + * 文件信息缓存的过期时间 + */ + Long FILE_CACHE_TIMEOUT_SECONDS = 3600L * 24 * 2; + } diff --git a/kernel-d-file/file-business/pom.xml b/kernel-d-file/file-business/pom.xml index acaf1892b..a9ceaf690 100644 --- a/kernel-d-file/file-business/pom.xml +++ b/kernel-d-file/file-business/pom.xml @@ -61,6 +61,20 @@ spring-boot-starter-web + + + com.javaguns.roses + cache-sdk-memory + ${roses.version} + true + + + com.javaguns.roses + cache-sdk-redis + ${roses.version} + true + + diff --git a/kernel-d-file/file-business/src/main/java/cn/stylefeng/roses/kernel/file/modular/cache/FileInfoMemoryCache.java b/kernel-d-file/file-business/src/main/java/cn/stylefeng/roses/kernel/file/modular/cache/FileInfoMemoryCache.java new file mode 100644 index 000000000..6d728e171 --- /dev/null +++ b/kernel-d-file/file-business/src/main/java/cn/stylefeng/roses/kernel/file/modular/cache/FileInfoMemoryCache.java @@ -0,0 +1,27 @@ +package cn.stylefeng.roses.kernel.file.modular.cache; + +import cn.hutool.cache.impl.TimedCache; +import cn.stylefeng.roses.kernel.cache.memory.AbstractMemoryCacheOperator; +import cn.stylefeng.roses.kernel.file.api.constants.FileConstants; +import cn.stylefeng.roses.kernel.file.api.pojo.response.SysFileInfoResponse; + +/** + * 文件信息的内存缓存 + *

+ * key是文件id,value是SysFileInfoResponse + * + * @author fengshuonan + * @since 2025/1/14 16:58 + */ +public class FileInfoMemoryCache extends AbstractMemoryCacheOperator { + + public FileInfoMemoryCache(TimedCache timedCache) { + super(timedCache); + } + + @Override + public String getCommonKeyPrefix() { + return FileConstants.FILE_INFO_CACHE_NAME_PREFIX; + } + +} \ No newline at end of file diff --git a/kernel-d-file/file-business/src/main/java/cn/stylefeng/roses/kernel/file/modular/cache/FileInfoRedisCache.java b/kernel-d-file/file-business/src/main/java/cn/stylefeng/roses/kernel/file/modular/cache/FileInfoRedisCache.java new file mode 100644 index 000000000..094281213 --- /dev/null +++ b/kernel-d-file/file-business/src/main/java/cn/stylefeng/roses/kernel/file/modular/cache/FileInfoRedisCache.java @@ -0,0 +1,27 @@ +package cn.stylefeng.roses.kernel.file.modular.cache; + +import cn.stylefeng.roses.kernel.cache.redis.AbstractRedisCacheOperator; +import cn.stylefeng.roses.kernel.file.api.constants.FileConstants; +import cn.stylefeng.roses.kernel.file.api.pojo.response.SysFileInfoResponse; +import org.springframework.data.redis.core.RedisTemplate; + +/** + * 文件信息的Redis缓存 + *

+ * key是文件id,value是SysFileInfoResponse + * + * @author fengshuonan + * @since 2025/1/14 16:58 + */ +public class FileInfoRedisCache extends AbstractRedisCacheOperator { + + public FileInfoRedisCache(RedisTemplate redisTemplate) { + super(redisTemplate); + } + + @Override + public String getCommonKeyPrefix() { + return FileConstants.FILE_INFO_CACHE_NAME_PREFIX; + } + +} diff --git a/kernel-d-file/file-business/src/main/java/cn/stylefeng/roses/kernel/file/modular/service/impl/SysFileInfoServiceImpl.java b/kernel-d-file/file-business/src/main/java/cn/stylefeng/roses/kernel/file/modular/service/impl/SysFileInfoServiceImpl.java index 8aaed1161..0b31d8073 100644 --- a/kernel-d-file/file-business/src/main/java/cn/stylefeng/roses/kernel/file/modular/service/impl/SysFileInfoServiceImpl.java +++ b/kernel-d-file/file-business/src/main/java/cn/stylefeng/roses/kernel/file/modular/service/impl/SysFileInfoServiceImpl.java @@ -33,6 +33,7 @@ import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import cn.hutool.crypto.digest.MD5; import cn.stylefeng.roses.kernel.auth.api.context.LoginContext; +import cn.stylefeng.roses.kernel.cache.api.CacheOperatorApi; import cn.stylefeng.roses.kernel.db.api.factory.PageFactory; import cn.stylefeng.roses.kernel.db.api.factory.PageResultFactory; import cn.stylefeng.roses.kernel.db.api.pojo.entity.BaseEntity; @@ -100,6 +101,9 @@ public class SysFileInfoServiceImpl extends ServiceImpl fileInfoCache; + @Override public SysFileInfoResponse getFileInfoResult(Long fileId) { diff --git a/kernel-d-file/file-spring-boot-starter/pom.xml b/kernel-d-file/file-spring-boot-starter/pom.xml index c65336b96..c6071f6b6 100644 --- a/kernel-d-file/file-spring-boot-starter/pom.xml +++ b/kernel-d-file/file-spring-boot-starter/pom.xml @@ -31,6 +31,20 @@ ${roses.version} + + + com.javaguns.roses + cache-sdk-memory + ${roses.version} + true + + + com.javaguns.roses + cache-sdk-redis + ${roses.version} + true + + diff --git a/kernel-d-file/file-spring-boot-starter/src/main/java/cn/stylefeng/roses/kernel/file/starter/cache/FileMemoryCacheAutoConfiguration.java b/kernel-d-file/file-spring-boot-starter/src/main/java/cn/stylefeng/roses/kernel/file/starter/cache/FileMemoryCacheAutoConfiguration.java new file mode 100644 index 000000000..241b7b9b4 --- /dev/null +++ b/kernel-d-file/file-spring-boot-starter/src/main/java/cn/stylefeng/roses/kernel/file/starter/cache/FileMemoryCacheAutoConfiguration.java @@ -0,0 +1,59 @@ +/* + * Copyright [2020-2030] [https://www.stylefeng.cn] + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * Guns采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点: + * + * 1.请不要删除和修改根目录下的LICENSE文件。 + * 2.请不要删除和修改Guns源码头部的版权声明。 + * 3.请保留源码和相关描述文件的项目出处,作者声明等。 + * 4.分发源码时候,请注明软件出处 https://gitee.com/stylefeng/guns + * 5.在修改包名,模块名称,项目代码等时,请注明软件出处 https://gitee.com/stylefeng/guns + * 6.若您的项目无法满足以上几点,可申请商业授权 + */ +package cn.stylefeng.roses.kernel.file.starter.cache; + +import cn.hutool.cache.CacheUtil; +import cn.hutool.cache.impl.TimedCache; +import cn.stylefeng.roses.kernel.cache.api.CacheOperatorApi; +import cn.stylefeng.roses.kernel.file.api.constants.FileConstants; +import cn.stylefeng.roses.kernel.file.api.pojo.response.SysFileInfoResponse; +import cn.stylefeng.roses.kernel.file.modular.cache.FileInfoMemoryCache; +import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingClass; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * 文件相关的缓存 + * + * @author fengshuonan + * @since 2025/1/14 17:03 + */ +@Configuration +@ConditionalOnMissingClass("org.springframework.data.redis.connection.RedisConnectionFactory") +public class FileMemoryCacheAutoConfiguration { + + /** + * 文件相关的信息缓存 + * + * @author fengshuonan + * @since 2025/1/14 17:04 + */ + @Bean + public CacheOperatorApi fileInfoCache() { + TimedCache cache = CacheUtil.newTimedCache(1000 * FileConstants.FILE_CACHE_TIMEOUT_SECONDS); + return new FileInfoMemoryCache(cache); + } + +} diff --git a/kernel-d-file/file-spring-boot-starter/src/main/java/cn/stylefeng/roses/kernel/file/starter/cache/FileRedisCacheAutoConfiguration.java b/kernel-d-file/file-spring-boot-starter/src/main/java/cn/stylefeng/roses/kernel/file/starter/cache/FileRedisCacheAutoConfiguration.java new file mode 100644 index 000000000..746252413 --- /dev/null +++ b/kernel-d-file/file-spring-boot-starter/src/main/java/cn/stylefeng/roses/kernel/file/starter/cache/FileRedisCacheAutoConfiguration.java @@ -0,0 +1,59 @@ +/* + * Copyright [2020-2030] [https://www.stylefeng.cn] + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * Guns采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点: + * + * 1.请不要删除和修改根目录下的LICENSE文件。 + * 2.请不要删除和修改Guns源码头部的版权声明。 + * 3.请保留源码和相关描述文件的项目出处,作者声明等。 + * 4.分发源码时候,请注明软件出处 https://gitee.com/stylefeng/guns + * 5.在修改包名,模块名称,项目代码等时,请注明软件出处 https://gitee.com/stylefeng/guns + * 6.若您的项目无法满足以上几点,可申请商业授权 + */ +package cn.stylefeng.roses.kernel.file.starter.cache; + +import cn.stylefeng.roses.kernel.cache.api.CacheOperatorApi; +import cn.stylefeng.roses.kernel.cache.redis.util.CreateRedisTemplateUtil; +import cn.stylefeng.roses.kernel.file.api.pojo.response.SysFileInfoResponse; +import cn.stylefeng.roses.kernel.file.modular.cache.FileInfoRedisCache; +import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.data.redis.connection.RedisConnectionFactory; +import org.springframework.data.redis.core.RedisTemplate; + +/** + * 文件信息的缓存 + * + * @author fengshuonan + * @since 2025/1/14 17:23 + */ +@Configuration +@ConditionalOnClass(name = "org.springframework.data.redis.connection.RedisConnectionFactory") +public class FileRedisCacheAutoConfiguration { + + /** + * 文件信息的Redis缓存 + * + * @author fengshuonan + * @since 2025/1/14 17:25 + */ + @Bean + public CacheOperatorApi fileInfoCache(RedisConnectionFactory redisConnectionFactory) { + RedisTemplate redisTemplate = CreateRedisTemplateUtil.createObject(redisConnectionFactory); + return new FileInfoRedisCache(redisTemplate); + } + +} diff --git a/kernel-d-file/file-spring-boot-starter/src/main/resources/META-INF/spring.factories b/kernel-d-file/file-spring-boot-starter/src/main/resources/META-INF/spring.factories index 9dd8e8ec7..0e9acd7bf 100644 --- a/kernel-d-file/file-spring-boot-starter/src/main/resources/META-INF/spring.factories +++ b/kernel-d-file/file-spring-boot-starter/src/main/resources/META-INF/spring.factories @@ -1,2 +1,4 @@ org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ - cn.stylefeng.roses.kernel.file.starter.ProjectFileAutoConfiguration \ No newline at end of file + cn.stylefeng.roses.kernel.file.starter.ProjectFileAutoConfiguration,\ + cn.stylefeng.roses.kernel.file.starter.cache.FileRedisCacheAutoConfiguration,\ + cn.stylefeng.roses.kernel.file.starter.cache.FileMemoryCacheAutoConfiguration \ No newline at end of file