From 6c17b06a7c48d21b85b8ba80ee82270cbc7af9d9 Mon Sep 17 00:00:00 2001 From: rouchen <3133657697@qq.com> Date: Wed, 27 Mar 2024 20:41:25 +0800 Subject: [PATCH] projectInfoCache --- muyu-common/muyu-common-cache/pom.xml | 27 ++++++ .../src/main/java/com/muyu/cache/CaChe.java | 61 ++++++++++++ .../java/com/muyu/cache/abs/CacheAbs.java | 97 +++++++++++++++++++ muyu-common/pom.xml | 1 + .../muyu-product/muyu-product-cache/pom.xml | 32 ++++++ .../muyu/product/cache/ProjectInfoCache.java | 53 ++++++++++ .../muyu/product/cache/ProjectInfoData.java | 18 ++++ .../muyu-product/muyu-product-server/pom.xml | 17 ++++ .../product/cache/ProjectInfoDataImpl.java | 28 ++++++ .../controller/ProjectInfoController.java | 58 +++++++---- .../product/service/ProjectInfoService.java | 2 + muyu-modules/muyu-product/pom.xml | 1 + pom.xml | 14 +++ 13 files changed, 390 insertions(+), 19 deletions(-) create mode 100644 muyu-common/muyu-common-cache/pom.xml create mode 100644 muyu-common/muyu-common-cache/src/main/java/com/muyu/cache/CaChe.java create mode 100644 muyu-common/muyu-common-cache/src/main/java/com/muyu/cache/abs/CacheAbs.java create mode 100644 muyu-modules/muyu-product/muyu-product-cache/pom.xml create mode 100644 muyu-modules/muyu-product/muyu-product-cache/src/main/java/com/muyu/product/cache/ProjectInfoCache.java create mode 100644 muyu-modules/muyu-product/muyu-product-cache/src/main/java/com/muyu/product/cache/ProjectInfoData.java create mode 100644 muyu-modules/muyu-product/muyu-product-server/src/main/java/com/muyu/product/cache/ProjectInfoDataImpl.java diff --git a/muyu-common/muyu-common-cache/pom.xml b/muyu-common/muyu-common-cache/pom.xml new file mode 100644 index 0000000..021b1f9 --- /dev/null +++ b/muyu-common/muyu-common-cache/pom.xml @@ -0,0 +1,27 @@ + + + 4.0.0 + + com.muyu + muyu-common + 3.6.3 + + + muyu-common-cache + + + 17 + 17 + UTF-8 + + + + + + com.muyu + muyu-common-redis + + + diff --git a/muyu-common/muyu-common-cache/src/main/java/com/muyu/cache/CaChe.java b/muyu-common/muyu-common-cache/src/main/java/com/muyu/cache/CaChe.java new file mode 100644 index 0000000..55fa658 --- /dev/null +++ b/muyu-common/muyu-common-cache/src/main/java/com/muyu/cache/CaChe.java @@ -0,0 +1,61 @@ +package com.muyu.cache; + +/** + * 缓存接口基类 CaChe + * + * @author LeYang + * on 2024/3/27 + */ +public interface CaChe { + /** + * key前缀 + * @return key前缀 + */ + public String keyPre(); + + /** + * 编码 + * @param key + * @return 键 + */ + public String encode(K key); + + /** + * 解码 + * @param redisKey 数据库键 + * @return ID + */ + public K decode(String redisKey); + + /** + * 通过key获取value值 + * @param key 键 + * @return 值 + */ + public V get(K key); + + /** + * 缓存添加/修改 + * @param key 键 + * @param value 值 + */ + public void put(K key,V value); + + /** + * 通过键删除 + * @param key 键 + */ + public void remove(K key); + + /** + * 刷新缓存时间 + * @param key 键 + */ + public void refreshTime(K key); + + /** + * 刷新缓存数据 + * @param key 键 + */ + public void refreshDate(K key); +} diff --git a/muyu-common/muyu-common-cache/src/main/java/com/muyu/cache/abs/CacheAbs.java b/muyu-common/muyu-common-cache/src/main/java/com/muyu/cache/abs/CacheAbs.java new file mode 100644 index 0000000..8f30909 --- /dev/null +++ b/muyu-common/muyu-common-cache/src/main/java/com/muyu/cache/abs/CacheAbs.java @@ -0,0 +1,97 @@ +package com.muyu.cache.abs; + +import com.muyu.cache.CaChe; +import com.muyu.common.redis.service.RedisService; +import org.springframework.beans.factory.annotation.Autowired; + +import java.util.concurrent.TimeUnit; + +/** + * 缓存抽象类 CacheAbs + * + * @author LeYang + * on 2024/3/27 + */ +public abstract class CacheAbs implements CaChe { + @Autowired + private RedisService redisService; + + + /** + * 编码 + * @param key Id + * @return 值 + */ + @Override + public String encode(K key) { + return keyPre()+key; + } + + + /** + * 通过key获取value 值 + * @param key 键 + * @return + */ + @Override + public V get(K key) { + V value= redisService.getCacheObject(encode(key)); + if (value == null){ + value = getData(key); + if (value == null ){ + value = defaultValue(); + } + } + this.put(key,value); + return value; + } + + /** + * 缓存添加/修改 + * @param key 键 + * @param value 值 + */ + @Override + public void put(K key, V value) { + this.redisService.setCacheObject(encode(key), value); + } + + /** + * 通过键删除 + * @param key 键 + */ + @Override + public void remove(K key) { + this.redisService.deleteObject(encode(key)); + } + + /** + * 刷新缓存 + * @param key 键 + */ + @Override + public void refreshTime(K key) { + this.redisService.expire(encode(key), 60, TimeUnit.SECONDS); + } + + /** + * 刷新缓存数据 + * @param key 键 + */ + @Override + public void refreshDate(K key) { + this.put(key,getData(key)); + } + + /** + * 从数据库获取数据 + * @param key ID + * @return 缓存对象 + */ + public abstract V getData(K key); + + /** + * 默认值 + */ + public abstract V defaultValue(); +} diff --git a/muyu-common/pom.xml b/muyu-common/pom.xml index 5b58e93..ca042b2 100644 --- a/muyu-common/pom.xml +++ b/muyu-common/pom.xml @@ -18,6 +18,7 @@ muyu-common-datascope muyu-common-datasource muyu-common-system + muyu-common-cache muyu-common diff --git a/muyu-modules/muyu-product/muyu-product-cache/pom.xml b/muyu-modules/muyu-product/muyu-product-cache/pom.xml new file mode 100644 index 0000000..30250af --- /dev/null +++ b/muyu-modules/muyu-product/muyu-product-cache/pom.xml @@ -0,0 +1,32 @@ + + + 4.0.0 + + com.muyu + muyu-product + 3.6.3 + + + muyu-product-cache + + + 17 + 17 + UTF-8 + + + + + com.muyu + muyu-common-cache + + + + + com.muyu + muyu-product-common + + + diff --git a/muyu-modules/muyu-product/muyu-product-cache/src/main/java/com/muyu/product/cache/ProjectInfoCache.java b/muyu-modules/muyu-product/muyu-product-cache/src/main/java/com/muyu/product/cache/ProjectInfoCache.java new file mode 100644 index 0000000..4ea91f4 --- /dev/null +++ b/muyu-modules/muyu-product/muyu-product-cache/src/main/java/com/muyu/product/cache/ProjectInfoCache.java @@ -0,0 +1,53 @@ +package com.muyu.product.cache; + +import com.muyu.cache.abs.CacheAbs; +import com.muyu.common.core.text.Convert; +import com.muyu.product.domain.ProjectInfo; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +/** + * 商品缓存 ProjectInfoCache + * + * @author LeYang + * on 2024/3/27 + */ +@Component +public class ProjectInfoCache extends CacheAbs { + @Autowired + private ProjectInfoData projectInfoData; + + /** + * key 前缀 + * @return key 前缀 + */ + @Override + public String keyPre() { + return "project:info:"; + } + + /** + * 解码 + * @param redisKey 数据库键 + * @return ID + */ + @Override + public Long decode(String redisKey) { + return Convert.toLong(redisKey.replace(keyPre(), ""),0L); + } + + /** + * 从数据库获取数据 + * @param key ID + * @return 缓存对象 + */ + @Override + public ProjectInfo getData(Long key) { + return projectInfoData.getData(key); + } + + @Override + public ProjectInfo defaultValue() { + return new ProjectInfo(); + } +} diff --git a/muyu-modules/muyu-product/muyu-product-cache/src/main/java/com/muyu/product/cache/ProjectInfoData.java b/muyu-modules/muyu-product/muyu-product-cache/src/main/java/com/muyu/product/cache/ProjectInfoData.java new file mode 100644 index 0000000..7249e7c --- /dev/null +++ b/muyu-modules/muyu-product/muyu-product-cache/src/main/java/com/muyu/product/cache/ProjectInfoData.java @@ -0,0 +1,18 @@ +package com.muyu.product.cache; + +import com.muyu.product.domain.ProjectInfo; + +/** + * 缓存数据获取 ProjectInfoData + * + * @author LeYang + * on 2024/3/27 + */ +public interface ProjectInfoData { + /** + * 从数据库获取数据 + * @param key ID + * @return 缓存对象 + */ + public ProjectInfo getData(Long key); +} diff --git a/muyu-modules/muyu-product/muyu-product-server/pom.xml b/muyu-modules/muyu-product/muyu-product-server/pom.xml index e242fdc..362c1b5 100644 --- a/muyu-modules/muyu-product/muyu-product-server/pom.xml +++ b/muyu-modules/muyu-product/muyu-product-server/pom.xml @@ -18,6 +18,11 @@ + + + com.muyu + muyu-product-cache + com.muyu @@ -84,6 +89,18 @@ com.muyu muyu-common-swagger + + com.muyu + muyu-product-cache + 3.6.3 + compile + + + com.muyu + muyu-product-cache + 3.6.3 + compile + diff --git a/muyu-modules/muyu-product/muyu-product-server/src/main/java/com/muyu/product/cache/ProjectInfoDataImpl.java b/muyu-modules/muyu-product/muyu-product-server/src/main/java/com/muyu/product/cache/ProjectInfoDataImpl.java new file mode 100644 index 0000000..b5b496b --- /dev/null +++ b/muyu-modules/muyu-product/muyu-product-server/src/main/java/com/muyu/product/cache/ProjectInfoDataImpl.java @@ -0,0 +1,28 @@ +package com.muyu.product.cache; + +import com.muyu.product.domain.ProjectInfo; +import com.muyu.product.service.ProjectInfoService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +/** + * 缓存数据获取 ProjectInfoDataImpl + * + * @author LeYang + * on 2024/3/27 + */ +@Service +public class ProjectInfoDataImpl implements ProjectInfoData{ + @Autowired + private ProjectInfoService projectInfoService; + + /** + * 从数据库获取数据 + * @param key ID + * @return 缓存对象 + */ + @Override + public ProjectInfo getData(Long key){ + return projectInfoService.getById(key); + } +} diff --git a/muyu-modules/muyu-product/muyu-product-server/src/main/java/com/muyu/product/controller/ProjectInfoController.java b/muyu-modules/muyu-product/muyu-product-server/src/main/java/com/muyu/product/controller/ProjectInfoController.java index 77936dd..c66b798 100644 --- a/muyu-modules/muyu-product/muyu-product-server/src/main/java/com/muyu/product/controller/ProjectInfoController.java +++ b/muyu-modules/muyu-product/muyu-product-server/src/main/java/com/muyu/product/controller/ProjectInfoController.java @@ -4,6 +4,7 @@ import java.util.List; import javax.servlet.http.HttpServletResponse; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.muyu.product.cache.ProjectInfoCache; import com.muyu.product.domain.AsProductAttributeInfo; import com.muyu.product.domain.ProjectSkuInfo; import com.muyu.product.domain.model.CategoryInfoSaveModel; @@ -87,31 +88,50 @@ public class ProjectInfoController extends BaseController { public Result getDetailInfo(@PathVariable("id") Long id) { return Result.success(projectInfoService.getDetailInfo(id)); } - - /** - * 获取商品信息详细信息 - */ + /** + * 获取商品信息详细信息 + */ + @ApiOperation("获取商品信息详细信息") + @RequiresPermissions("product:info:query") + @GetMapping(value = "/cache/{id}") + @ApiImplicitParam(name = "id", value = "id", required = true, dataType = "Long", paramType = "path", dataTypeClass = Long.class) + public Result getCacheInfo(@PathVariable("id") Long id) { + return Result.success(projectInfoService.getById(id)); + } + @Autowired + private ProjectInfoCache projectInfoCache; @ApiOperation("获取商品信息详细信息") @RequiresPermissions("product:info:query") @GetMapping(value = "/{id}") @ApiImplicitParam(name = "id", value = "id", required = true, dataType = "Long", paramType = "path", dataTypeClass = Long.class) - public Result getInfo(@PathVariable("id") Long id) { - - LambdaQueryWrapper asProductAttributeInfoLambdaQueryWrapper = new LambdaQueryWrapper<>(); - asProductAttributeInfoLambdaQueryWrapper.eq(AsProductAttributeInfo::getProductId, id); - List list = asProductAttributeInfoService.list(asProductAttributeInfoLambdaQueryWrapper); - - ProjectInfo projectInfo = projectInfoService.getById(id); - LambdaQueryWrapper projectSkuInfoLambdaQueryWrapper = new LambdaQueryWrapper<>(); - projectSkuInfoLambdaQueryWrapper.eq(ProjectSkuInfo::getProjectId,id); - List projectSkuInfos = projectSkuInfoService.list(projectSkuInfoLambdaQueryWrapper); - ProjectAddModel projectAddModel = ProjectAddModel.queryBuild(projectInfo, - list, projectSkuInfos - ); - projectAddModel.setId(id); - return Result.success(projectAddModel); + public Result getInfo(@PathVariable("id") Long id) { + return Result.success(projectInfoCache.get(id)); } +// /** +// * 获取商品信息详细信息 +// */ +// @ApiOperation("获取商品信息详细信息") +// @RequiresPermissions("product:info:query") +// @GetMapping(value = "/{id}") +// @ApiImplicitParam(name = "id", value = "id", required = true, dataType = "Long", paramType = "path", dataTypeClass = Long.class) +// public Result getInfo(@PathVariable("id") Long id) { +// +// LambdaQueryWrapper asProductAttributeInfoLambdaQueryWrapper = new LambdaQueryWrapper<>(); +// asProductAttributeInfoLambdaQueryWrapper.eq(AsProductAttributeInfo::getProductId, id); +// List list = asProductAttributeInfoService.list(asProductAttributeInfoLambdaQueryWrapper); +// +// ProjectInfo projectInfo = projectInfoService.getById(id); +// LambdaQueryWrapper projectSkuInfoLambdaQueryWrapper = new LambdaQueryWrapper<>(); +// projectSkuInfoLambdaQueryWrapper.eq(ProjectSkuInfo::getProjectId,id); +// List projectSkuInfos = projectSkuInfoService.list(projectSkuInfoLambdaQueryWrapper); +// ProjectAddModel projectAddModel = ProjectAddModel.queryBuild(projectInfo, +// list, projectSkuInfos +// ); +// projectAddModel.setId(id); +// return Result.success(projectAddModel); +// } + /** * 新增商品信息 */ diff --git a/muyu-modules/muyu-product/muyu-product-server/src/main/java/com/muyu/product/service/ProjectInfoService.java b/muyu-modules/muyu-product/muyu-product-server/src/main/java/com/muyu/product/service/ProjectInfoService.java index 0db4a2d..8022198 100644 --- a/muyu-modules/muyu-product/muyu-product-server/src/main/java/com/muyu/product/service/ProjectInfoService.java +++ b/muyu-modules/muyu-product/muyu-product-server/src/main/java/com/muyu/product/service/ProjectInfoService.java @@ -32,4 +32,6 @@ public interface ProjectInfoService extends IService { boolean del(List ids); ProjectDetailResp getDetailInfo(Long id); + + } diff --git a/muyu-modules/muyu-product/pom.xml b/muyu-modules/muyu-product/pom.xml index 4294151..8841021 100644 --- a/muyu-modules/muyu-product/pom.xml +++ b/muyu-modules/muyu-product/pom.xml @@ -15,6 +15,7 @@ muyu-product-common muyu-product-remote muyu-product-server + muyu-product-cache diff --git a/pom.xml b/pom.xml index a45fa72..0e81d24 100644 --- a/pom.xml +++ b/pom.xml @@ -150,6 +150,13 @@ ${muyu.version} + + + com.muyu + muyu-common-cache + ${muyu.version} + + com.muyu @@ -220,6 +227,13 @@ ${muyu.version} + + + com.muyu + muyu-product-cache + ${muyu.version} + +