diff --git a/smart-admin-api-java17-springboot3/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/category/domain/entity/CategoryEntity.java b/smart-admin-api-java17-springboot3/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/category/domain/entity/CategoryEntity.java
index 83933a1d..d6934a8a 100644
--- a/smart-admin-api-java17-springboot3/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/category/domain/entity/CategoryEntity.java
+++ b/smart-admin-api-java17-springboot3/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/category/domain/entity/CategoryEntity.java
@@ -6,6 +6,8 @@ import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import net.lab1024.sa.admin.module.business.category.constant.CategoryTypeEnum;
+import java.io.Serial;
+import java.io.Serializable;
import java.time.LocalDateTime;
/**
@@ -19,7 +21,10 @@ import java.time.LocalDateTime;
*/
@Data
@TableName("t_category")
-public class CategoryEntity {
+public class CategoryEntity implements Serializable {
+
+ @Serial
+ private static final long serialVersionUID = 1L;
@TableId(type = IdType.AUTO)
private Long categoryId;
diff --git a/smart-admin-api-java17-springboot3/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/category/domain/vo/CategoryTreeVO.java b/smart-admin-api-java17-springboot3/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/category/domain/vo/CategoryTreeVO.java
index 3c55b658..6fbd0e0a 100644
--- a/smart-admin-api-java17-springboot3/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/category/domain/vo/CategoryTreeVO.java
+++ b/smart-admin-api-java17-springboot3/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/category/domain/vo/CategoryTreeVO.java
@@ -3,6 +3,8 @@ package net.lab1024.sa.admin.module.business.category.domain.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
+import java.io.Serial;
+import java.io.Serializable;
import java.util.List;
/**
@@ -15,7 +17,10 @@ import java.util.List;
* @Copyright 1024创新实验室
*/
@Data
-public class CategoryTreeVO {
+public class CategoryTreeVO implements Serializable {
+
+ @Serial
+ private static final long serialVersionUID = 1L;
@Schema(description = "类目id")
private Long categoryId;
diff --git a/smart-admin-api-java17-springboot3/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/department/domain/vo/DepartmentVO.java b/smart-admin-api-java17-springboot3/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/department/domain/vo/DepartmentVO.java
index 3566f877..def0c314 100644
--- a/smart-admin-api-java17-springboot3/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/department/domain/vo/DepartmentVO.java
+++ b/smart-admin-api-java17-springboot3/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/department/domain/vo/DepartmentVO.java
@@ -3,6 +3,8 @@ package net.lab1024.sa.admin.module.system.department.domain.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
+import java.io.Serial;
+import java.io.Serializable;
import java.time.LocalDateTime;
/**
@@ -15,7 +17,10 @@ import java.time.LocalDateTime;
* @Copyright 1024创新实验室
*/
@Data
-public class DepartmentVO {
+public class DepartmentVO implements Serializable {
+
+ @Serial
+ private static final long serialVersionUID = 1L;
@Schema(description = "部门id")
private Long departmentId;
diff --git a/smart-admin-api-java17-springboot3/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/support/AdminCacheController.java b/smart-admin-api-java17-springboot3/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/support/AdminCacheController.java
index adaacdb3..de25e80a 100644
--- a/smart-admin-api-java17-springboot3/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/support/AdminCacheController.java
+++ b/smart-admin-api-java17-springboot3/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/support/AdminCacheController.java
@@ -7,7 +7,7 @@ import jakarta.annotation.Resource;
import net.lab1024.sa.base.common.controller.SupportBaseController;
import net.lab1024.sa.base.common.domain.ResponseDTO;
import net.lab1024.sa.base.constant.SwaggerTagConst;
-import net.lab1024.sa.base.module.support.cache.CacheService;
+import net.lab1024.sa.base.module.support.cache.service.CacheService;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;
diff --git a/smart-admin-api-java17-springboot3/sa-base/src/main/java/net/lab1024/sa/base/module/support/cache/config/CacheConfig.java b/smart-admin-api-java17-springboot3/sa-base/src/main/java/net/lab1024/sa/base/module/support/cache/config/CacheConfig.java
new file mode 100644
index 00000000..fe7c85cb
--- /dev/null
+++ b/smart-admin-api-java17-springboot3/sa-base/src/main/java/net/lab1024/sa/base/module/support/cache/config/CacheConfig.java
@@ -0,0 +1,35 @@
+package net.lab1024.sa.base.module.support.cache.config;
+
+import net.lab1024.sa.base.module.support.cache.service.CacheService;
+import net.lab1024.sa.base.module.support.cache.service.CaffeineCacheServiceImpl;
+import net.lab1024.sa.base.module.support.cache.service.RedisCacheServiceImpl;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+/**
+ * 缓存配置
+ *
+ * @author zhoumingfa
+ * @date 2025/03/28
+ */
+@Configuration
+public class CacheConfig {
+
+ private static final String REDIS_CACHE = "redis";
+ private static final String CAFFEINE_CACHE = "caffeine";
+
+
+ @Bean
+ @ConditionalOnProperty(prefix = "spring.cache", name = {"type"}, havingValue = REDIS_CACHE)
+ public CacheService redisCacheService() {
+ return new RedisCacheServiceImpl();
+ }
+
+ @Bean
+ @ConditionalOnProperty(prefix = "spring.cache", name = {"type"}, havingValue = CAFFEINE_CACHE)
+ public CacheService caffeineCacheService() {
+ return new CaffeineCacheServiceImpl();
+ }
+
+}
diff --git a/smart-admin-api-java17-springboot3/sa-base/src/main/java/net/lab1024/sa/base/module/support/cache/service/CacheService.java b/smart-admin-api-java17-springboot3/sa-base/src/main/java/net/lab1024/sa/base/module/support/cache/service/CacheService.java
new file mode 100644
index 00000000..e0742b66
--- /dev/null
+++ b/smart-admin-api-java17-springboot3/sa-base/src/main/java/net/lab1024/sa/base/module/support/cache/service/CacheService.java
@@ -0,0 +1,34 @@
+package net.lab1024.sa.base.module.support.cache.service;
+
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * 缓存服务
+ *
+ * @Author 1024创新实验室: 罗伊
+ * @Date 2021/10/11 20:07
+ * @Wechat zhuoda1024
+ * @Email lab1024@163.com
+ * @Copyright 1024创新实验室
+ */
+@Service
+public interface CacheService {
+
+ /**
+ * 获取所有缓存名称
+ */
+ List cacheNames();
+
+ /**
+ * 某个缓存下的所有 key
+ */
+ List cacheKey(String cacheName);
+
+ /**
+ * 移除某个 key
+ */
+ void removeCache(String cacheName);
+
+}
diff --git a/smart-admin-api-java17-springboot3/sa-base/src/main/java/net/lab1024/sa/base/module/support/cache/CacheService.java b/smart-admin-api-java17-springboot3/sa-base/src/main/java/net/lab1024/sa/base/module/support/cache/service/CaffeineCacheServiceImpl.java
similarity index 85%
rename from smart-admin-api-java17-springboot3/sa-base/src/main/java/net/lab1024/sa/base/module/support/cache/CacheService.java
rename to smart-admin-api-java17-springboot3/sa-base/src/main/java/net/lab1024/sa/base/module/support/cache/service/CaffeineCacheServiceImpl.java
index 0229b3f4..b07ab1fa 100644
--- a/smart-admin-api-java17-springboot3/sa-base/src/main/java/net/lab1024/sa/base/module/support/cache/CacheService.java
+++ b/smart-admin-api-java17-springboot3/sa-base/src/main/java/net/lab1024/sa/base/module/support/cache/service/CaffeineCacheServiceImpl.java
@@ -1,4 +1,4 @@
-package net.lab1024.sa.base.module.support.cache;
+package net.lab1024.sa.base.module.support.cache.service;
import com.google.common.collect.Lists;
import jakarta.annotation.Resource;
@@ -6,7 +6,6 @@ import net.lab1024.sa.base.constant.ReloadConst;
import net.lab1024.sa.base.module.support.reload.core.annoation.SmartReload;
import org.springframework.cache.caffeine.CaffeineCache;
import org.springframework.cache.caffeine.CaffeineCacheManager;
-import org.springframework.stereotype.Service;
import java.util.Collection;
import java.util.List;
@@ -14,32 +13,31 @@ import java.util.Set;
import java.util.stream.Collectors;
/**
- * 缓存操作
+ * caffeine 缓存实现
*
* @Author 1024创新实验室: 罗伊
* @Date 2021/10/11 20:07
* @Wechat zhuoda1024
* @Email lab1024@163.com
- * @Copyright 1024创新实验室
+ * @Copyright 1024创新实验室
*/
-@Service
-public class CacheService {
+public class CaffeineCacheServiceImpl implements CacheService {
@Resource
private CaffeineCacheManager caffeineCacheManager;
/**
* 获取所有缓存名称
- *
*/
+ @Override
public List cacheNames() {
return Lists.newArrayList(caffeineCacheManager.getCacheNames());
}
/**
- * 某个缓存下的所有key
- *
+ * 某个缓存下的所有 key
*/
+ @Override
public List cacheKey(String cacheName) {
CaffeineCache cache = (CaffeineCache) caffeineCacheManager.getCache(cacheName);
if (cache == null) {
@@ -50,10 +48,9 @@ public class CacheService {
}
/**
- * 移除某个key
- *
+ * 移除某个 key
*/
-
+ @Override
public void removeCache(String cacheName) {
CaffeineCache cache = (CaffeineCache) caffeineCacheManager.getCache(cacheName);
if (cache != null) {
diff --git a/smart-admin-api-java17-springboot3/sa-base/src/main/java/net/lab1024/sa/base/module/support/cache/service/RedisCacheServiceImpl.java b/smart-admin-api-java17-springboot3/sa-base/src/main/java/net/lab1024/sa/base/module/support/cache/service/RedisCacheServiceImpl.java
new file mode 100644
index 00000000..5efeb3ca
--- /dev/null
+++ b/smart-admin-api-java17-springboot3/sa-base/src/main/java/net/lab1024/sa/base/module/support/cache/service/RedisCacheServiceImpl.java
@@ -0,0 +1,86 @@
+package net.lab1024.sa.base.module.support.cache.service;
+
+import cn.hutool.core.util.StrUtil;
+import com.google.common.collect.Lists;
+import jakarta.annotation.Resource;
+import net.lab1024.sa.base.constant.ReloadConst;
+import net.lab1024.sa.base.module.support.reload.core.annoation.SmartReload;
+import org.springframework.data.redis.cache.RedisCache;
+import org.springframework.data.redis.cache.RedisCacheManager;
+import org.springframework.data.redis.connection.RedisConnection;
+import org.springframework.data.redis.connection.RedisConnectionFactory;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Set;
+import java.util.stream.Collectors;
+
+/**
+ * redis 缓存实现
+ *
+ * @author zhoumingfa
+ * @date 2025/3/28
+ */
+public class RedisCacheServiceImpl implements CacheService {
+
+ @Resource
+ private RedisCacheManager redisCacheManager;
+
+ @Resource
+ private RedisConnectionFactory redisConnectionFactory;
+
+ /**
+ * 获取所有缓存名称
+ */
+ @Override
+ public List cacheNames() {
+ return Lists.newArrayList(redisCacheManager.getCacheNames());
+ }
+
+ /**
+ * 某个缓存下的所有 key
+ */
+ @Override
+ public List cacheKey(String cacheName) {
+ RedisCache cache = (RedisCache) redisCacheManager.getCache(cacheName);
+ if (cache == null) {
+ return Lists.newArrayList();
+ }
+ // 获取 Redis 连接
+ RedisConnection connection = redisConnectionFactory.getConnection();
+ // 根据指定的 key 模式获取所有匹配的键
+ Set keys = connection.keyCommands().keys((cacheName + ":*").getBytes());
+
+ if (keys != null) {
+ return keys.stream().map(key -> {
+ String redisKey = StrUtil.str(key, "utf-8");
+ // 从 Redis 键中提取出最后一个冒号后面的字符串作为真正的键
+ return redisKey.substring(redisKey.lastIndexOf(":") + 1);
+ }).collect(Collectors.toList());
+ }
+ connection.close();
+ return Lists.newArrayList(cacheName);
+ }
+
+ /**
+ * 移除某个 key
+ */
+ @Override
+ public void removeCache(String cacheName) {
+ RedisCache cache = (RedisCache) redisCacheManager.getCache(cacheName);
+ if (cache != null) {
+ cache.clear();
+ }
+ }
+
+ @SmartReload(ReloadConst.CACHE_SERVICE)
+ public void clearAllCache() {
+ Collection cacheNames = redisCacheManager.getCacheNames();
+ for (String name : cacheNames) {
+ RedisCache cache = (RedisCache) redisCacheManager.getCache(name);
+ if (cache != null) {
+ cache.clear();
+ }
+ }
+ }
+}
diff --git a/smart-admin-api-java8-springboot2/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/category/domain/entity/CategoryEntity.java b/smart-admin-api-java8-springboot2/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/category/domain/entity/CategoryEntity.java
index 83933a1d..4b0b348c 100644
--- a/smart-admin-api-java8-springboot2/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/category/domain/entity/CategoryEntity.java
+++ b/smart-admin-api-java8-springboot2/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/category/domain/entity/CategoryEntity.java
@@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import net.lab1024.sa.admin.module.business.category.constant.CategoryTypeEnum;
+import java.io.Serializable;
import java.time.LocalDateTime;
/**
@@ -19,7 +20,9 @@ import java.time.LocalDateTime;
*/
@Data
@TableName("t_category")
-public class CategoryEntity {
+public class CategoryEntity implements Serializable {
+
+ private static final long serialVersionUID = 1L;
@TableId(type = IdType.AUTO)
private Long categoryId;
diff --git a/smart-admin-api-java8-springboot2/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/category/domain/vo/CategoryTreeVO.java b/smart-admin-api-java8-springboot2/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/category/domain/vo/CategoryTreeVO.java
index 3c55b658..bbd7fb4a 100644
--- a/smart-admin-api-java8-springboot2/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/category/domain/vo/CategoryTreeVO.java
+++ b/smart-admin-api-java8-springboot2/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/category/domain/vo/CategoryTreeVO.java
@@ -3,6 +3,7 @@ package net.lab1024.sa.admin.module.business.category.domain.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
+import java.io.Serializable;
import java.util.List;
/**
@@ -15,7 +16,9 @@ import java.util.List;
* @Copyright 1024创新实验室
*/
@Data
-public class CategoryTreeVO {
+public class CategoryTreeVO implements Serializable {
+
+ private static final long serialVersionUID = 1L;
@Schema(description = "类目id")
private Long categoryId;
diff --git a/smart-admin-api-java8-springboot2/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/department/domain/vo/DepartmentVO.java b/smart-admin-api-java8-springboot2/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/department/domain/vo/DepartmentVO.java
index 3566f877..fc591634 100644
--- a/smart-admin-api-java8-springboot2/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/department/domain/vo/DepartmentVO.java
+++ b/smart-admin-api-java8-springboot2/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/department/domain/vo/DepartmentVO.java
@@ -3,6 +3,7 @@ package net.lab1024.sa.admin.module.system.department.domain.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
+import java.io.Serializable;
import java.time.LocalDateTime;
/**
@@ -15,7 +16,9 @@ import java.time.LocalDateTime;
* @Copyright 1024创新实验室
*/
@Data
-public class DepartmentVO {
+public class DepartmentVO implements Serializable {
+
+ private static final long serialVersionUID = 1L;
@Schema(description = "部门id")
private Long departmentId;
diff --git a/smart-admin-api-java8-springboot2/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/support/AdminCacheController.java b/smart-admin-api-java8-springboot2/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/support/AdminCacheController.java
index 9696e5ec..b6b5906e 100644
--- a/smart-admin-api-java8-springboot2/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/support/AdminCacheController.java
+++ b/smart-admin-api-java8-springboot2/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/support/AdminCacheController.java
@@ -6,7 +6,7 @@ import io.swagger.v3.oas.annotations.Operation;
import net.lab1024.sa.base.common.controller.SupportBaseController;
import net.lab1024.sa.base.common.domain.ResponseDTO;
import net.lab1024.sa.base.constant.SwaggerTagConst;
-import net.lab1024.sa.base.module.support.cache.CacheService;
+import net.lab1024.sa.base.module.support.cache.cache.service.CacheService;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;
diff --git a/smart-admin-api-java8-springboot2/sa-base/src/main/java/net/lab1024/sa/base/module/support/cache/cache/config/CacheConfig.java b/smart-admin-api-java8-springboot2/sa-base/src/main/java/net/lab1024/sa/base/module/support/cache/cache/config/CacheConfig.java
new file mode 100644
index 00000000..20afcf34
--- /dev/null
+++ b/smart-admin-api-java8-springboot2/sa-base/src/main/java/net/lab1024/sa/base/module/support/cache/cache/config/CacheConfig.java
@@ -0,0 +1,35 @@
+package net.lab1024.sa.base.module.support.cache.cache.config;
+
+import net.lab1024.sa.base.module.support.cache.cache.service.CacheService;
+import net.lab1024.sa.base.module.support.cache.cache.service.CaffeineCacheServiceImpl;
+import net.lab1024.sa.base.module.support.cache.cache.service.RedisCacheServiceImpl;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+/**
+ * 缓存配置
+ *
+ * @author zhoumingfa
+ * @date 2025/03/28
+ */
+@Configuration
+public class CacheConfig {
+
+ private static final String REDIS_CACHE = "redis";
+ private static final String CAFFEINE_CACHE = "caffeine";
+
+
+ @Bean
+ @ConditionalOnProperty(prefix = "spring.cache", name = {"type"}, havingValue = REDIS_CACHE)
+ public CacheService redisCacheService() {
+ return new RedisCacheServiceImpl();
+ }
+
+ @Bean
+ @ConditionalOnProperty(prefix = "spring.cache", name = {"type"}, havingValue = CAFFEINE_CACHE)
+ public CacheService caffeineCacheService() {
+ return new CaffeineCacheServiceImpl();
+ }
+
+}
diff --git a/smart-admin-api-java8-springboot2/sa-base/src/main/java/net/lab1024/sa/base/module/support/cache/cache/service/CacheService.java b/smart-admin-api-java8-springboot2/sa-base/src/main/java/net/lab1024/sa/base/module/support/cache/cache/service/CacheService.java
new file mode 100644
index 00000000..c883386e
--- /dev/null
+++ b/smart-admin-api-java8-springboot2/sa-base/src/main/java/net/lab1024/sa/base/module/support/cache/cache/service/CacheService.java
@@ -0,0 +1,34 @@
+package net.lab1024.sa.base.module.support.cache.cache.service;
+
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * 缓存服务
+ *
+ * @Author 1024创新实验室: 罗伊
+ * @Date 2021/10/11 20:07
+ * @Wechat zhuoda1024
+ * @Email lab1024@163.com
+ * @Copyright 1024创新实验室
+ */
+@Service
+public interface CacheService {
+
+ /**
+ * 获取所有缓存名称
+ */
+ List cacheNames();
+
+ /**
+ * 某个缓存下的所有 key
+ */
+ List cacheKey(String cacheName);
+
+ /**
+ * 移除某个 key
+ */
+ void removeCache(String cacheName);
+
+}
diff --git a/smart-admin-api-java8-springboot2/sa-base/src/main/java/net/lab1024/sa/base/module/support/cache/CacheService.java b/smart-admin-api-java8-springboot2/sa-base/src/main/java/net/lab1024/sa/base/module/support/cache/cache/service/CaffeineCacheServiceImpl.java
similarity index 84%
rename from smart-admin-api-java8-springboot2/sa-base/src/main/java/net/lab1024/sa/base/module/support/cache/CacheService.java
rename to smart-admin-api-java8-springboot2/sa-base/src/main/java/net/lab1024/sa/base/module/support/cache/cache/service/CaffeineCacheServiceImpl.java
index 16326aa0..2f18a782 100644
--- a/smart-admin-api-java8-springboot2/sa-base/src/main/java/net/lab1024/sa/base/module/support/cache/CacheService.java
+++ b/smart-admin-api-java8-springboot2/sa-base/src/main/java/net/lab1024/sa/base/module/support/cache/cache/service/CaffeineCacheServiceImpl.java
@@ -1,11 +1,10 @@
-package net.lab1024.sa.base.module.support.cache;
+package net.lab1024.sa.base.module.support.cache.cache.service;
import com.google.common.collect.Lists;
import net.lab1024.sa.base.constant.ReloadConst;
import net.lab1024.sa.base.module.support.reload.core.annoation.SmartReload;
import org.springframework.cache.caffeine.CaffeineCache;
import org.springframework.cache.caffeine.CaffeineCacheManager;
-import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.Collection;
@@ -14,32 +13,31 @@ import java.util.Set;
import java.util.stream.Collectors;
/**
- * 缓存操作
+ * caffeine 缓存实现
*
* @Author 1024创新实验室: 罗伊
* @Date 2021/10/11 20:07
* @Wechat zhuoda1024
* @Email lab1024@163.com
- * @Copyright 1024创新实验室
+ * @Copyright 1024创新实验室
*/
-@Service
-public class CacheService {
+public class CaffeineCacheServiceImpl implements CacheService {
@Resource
private CaffeineCacheManager caffeineCacheManager;
/**
* 获取所有缓存名称
- *
*/
+ @Override
public List cacheNames() {
return Lists.newArrayList(caffeineCacheManager.getCacheNames());
}
/**
- * 某个缓存下的所有key
- *
+ * 某个缓存下的所有 key
*/
+ @Override
public List cacheKey(String cacheName) {
CaffeineCache cache = (CaffeineCache) caffeineCacheManager.getCache(cacheName);
if (cache == null) {
@@ -50,10 +48,9 @@ public class CacheService {
}
/**
- * 移除某个key
- *
+ * 移除某个 key
*/
-
+ @Override
public void removeCache(String cacheName) {
CaffeineCache cache = (CaffeineCache) caffeineCacheManager.getCache(cacheName);
if (cache != null) {
diff --git a/smart-admin-api-java8-springboot2/sa-base/src/main/java/net/lab1024/sa/base/module/support/cache/cache/service/RedisCacheServiceImpl.java b/smart-admin-api-java8-springboot2/sa-base/src/main/java/net/lab1024/sa/base/module/support/cache/cache/service/RedisCacheServiceImpl.java
new file mode 100644
index 00000000..5a1a7e36
--- /dev/null
+++ b/smart-admin-api-java8-springboot2/sa-base/src/main/java/net/lab1024/sa/base/module/support/cache/cache/service/RedisCacheServiceImpl.java
@@ -0,0 +1,86 @@
+package net.lab1024.sa.base.module.support.cache.cache.service;
+
+import cn.hutool.core.util.StrUtil;
+import com.google.common.collect.Lists;
+import net.lab1024.sa.base.constant.ReloadConst;
+import net.lab1024.sa.base.module.support.reload.core.annoation.SmartReload;
+import org.springframework.data.redis.cache.RedisCache;
+import org.springframework.data.redis.cache.RedisCacheManager;
+import org.springframework.data.redis.connection.RedisConnection;
+import org.springframework.data.redis.connection.RedisConnectionFactory;
+
+import javax.annotation.Resource;
+import java.util.Collection;
+import java.util.List;
+import java.util.Set;
+import java.util.stream.Collectors;
+
+/**
+ * redis 缓存实现
+ *
+ * @author zhoumingfa
+ * @date 2025/3/28
+ */
+public class RedisCacheServiceImpl implements CacheService {
+
+ @Resource
+ private RedisCacheManager redisCacheManager;
+
+ @Resource
+ private RedisConnectionFactory redisConnectionFactory;
+
+ /**
+ * 获取所有缓存名称
+ */
+ @Override
+ public List cacheNames() {
+ return Lists.newArrayList(redisCacheManager.getCacheNames());
+ }
+
+ /**
+ * 某个缓存下的所有 key
+ */
+ @Override
+ public List cacheKey(String cacheName) {
+ RedisCache cache = (RedisCache) redisCacheManager.getCache(cacheName);
+ if (cache == null) {
+ return Lists.newArrayList();
+ }
+ // 获取 Redis 连接
+ RedisConnection connection = redisConnectionFactory.getConnection();
+ // 根据指定的 key 模式获取所有匹配的键
+ Set keys = connection.keyCommands().keys((cacheName + ":*").getBytes());
+
+ if (keys != null) {
+ return keys.stream().map(key -> {
+ String redisKey = StrUtil.str(key, "utf-8");
+ // 从 Redis 键中提取出最后一个冒号后面的字符串作为真正的键
+ return redisKey.substring(redisKey.lastIndexOf(":") + 1);
+ }).collect(Collectors.toList());
+ }
+ connection.close();
+ return Lists.newArrayList(cacheName);
+ }
+
+ /**
+ * 移除某个 key
+ */
+ @Override
+ public void removeCache(String cacheName) {
+ RedisCache cache = (RedisCache) redisCacheManager.getCache(cacheName);
+ if (cache != null) {
+ cache.clear();
+ }
+ }
+
+ @SmartReload(ReloadConst.CACHE_SERVICE)
+ public void clearAllCache() {
+ Collection cacheNames = redisCacheManager.getCacheNames();
+ for (String name : cacheNames) {
+ RedisCache cache = (RedisCache) redisCacheManager.getCache(name);
+ if (cache != null) {
+ cache.clear();
+ }
+ }
+ }
+}