From c76dfb1228c67062ae0545e420f8c9314143e1f2 Mon Sep 17 00:00:00 2001 From: DongZeLiang <2746733890@qq.com> Date: Fri, 29 Mar 2024 19:41:55 +0800 Subject: [PATCH] =?UTF-8?q?=E5=88=9D=E5=A7=8B=E5=8C=96hash=E7=BC=93?= =?UTF-8?q?=E5=AD=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/muyu/common/cache/Cache.java | 25 +---- .../java/com/muyu/common/cache/HashCache.java | 97 +++++++++++++++++++ .../muyu/common/cache/abs/HashCacheAbs.java | 11 +++ .../cache/decoration/DecorationKey.java | 30 ++++++ .../muyu/product/cache/ProjectInfoCache.java | 20 +++- .../muyu/product/cache/ProjectSkuCache.java | 9 ++ .../product/cache/ProjectSkuStockCache.java | 9 ++ .../{ => datasource}/ProjectInfoData.java | 2 +- .../cache/impl/ProjectInfoDataImpl.java | 2 +- 9 files changed, 180 insertions(+), 25 deletions(-) create mode 100644 muyu-common/muyu-common-cache/src/main/java/com/muyu/common/cache/HashCache.java create mode 100644 muyu-common/muyu-common-cache/src/main/java/com/muyu/common/cache/abs/HashCacheAbs.java create mode 100644 muyu-common/muyu-common-cache/src/main/java/com/muyu/common/cache/decoration/DecorationKey.java create mode 100644 muyu-modules/muyu-product/muyu-product-cache/src/main/java/com/muyu/product/cache/ProjectSkuCache.java create mode 100644 muyu-modules/muyu-product/muyu-product-cache/src/main/java/com/muyu/product/cache/ProjectSkuStockCache.java rename muyu-modules/muyu-product/muyu-product-cache/src/main/java/com/muyu/product/cache/{ => datasource}/ProjectInfoData.java (88%) diff --git a/muyu-common/muyu-common-cache/src/main/java/com/muyu/common/cache/Cache.java b/muyu-common/muyu-common-cache/src/main/java/com/muyu/common/cache/Cache.java index d3da0ca..9d96206 100644 --- a/muyu-common/muyu-common-cache/src/main/java/com/muyu/common/cache/Cache.java +++ b/muyu-common/muyu-common-cache/src/main/java/com/muyu/common/cache/Cache.java @@ -1,32 +1,13 @@ package com.muyu.common.cache; +import com.muyu.common.cache.decoration.DecorationKey; + /** * @author DongZl * @description: 缓存接口基类 * @Date 2024-3-26 下午 03:25 */ -public interface Cache { - - /** - * key前缀 - * @return key前缀 - */ - public String keyPre(); - - - /** - * 编码 - * @param key ID - * @return 键 - */ - public String encode(K key); - - /** - * 解码 - * @param redisKey 数据库键 - * @return ID - */ - public K decode(String redisKey); +public interface Cache extends DecorationKey { /** * 通过Key获取value值 diff --git a/muyu-common/muyu-common-cache/src/main/java/com/muyu/common/cache/HashCache.java b/muyu-common/muyu-common-cache/src/main/java/com/muyu/common/cache/HashCache.java new file mode 100644 index 0000000..b2dceff --- /dev/null +++ b/muyu-common/muyu-common-cache/src/main/java/com/muyu/common/cache/HashCache.java @@ -0,0 +1,97 @@ +package com.muyu.common.cache; + +import com.muyu.common.cache.decoration.DecorationKey; + +import java.util.List; +import java.util.Map; +import java.util.function.Function; + +/** + * @author DongZl + * @description: Hash缓存基准 + * @Date 2024-3-29 下午 03:16 + */ +public interface HashCache extends DecorationKey { + + + /** + * 编码 + * @param hashKey ID + * @return 键 + */ + public String encodeHashKey(HK hashKey); + + /** + * 解码 + * @param redisHashKey 数据库键 + * @return ID + */ + public K decodeHashKey(String redisHashKey); + + /** + * 通过Key获取所有的map + * @param key 数据库键 + * @return 所有集合Map + */ + public Map get(K key); + + /** + * 通过键和hashKey获取数据库hashValue + * @param key 键 + * @param hashKey hash键 + * @return hash值 + */ + public HV get(K key, HK hashKey); + + /** + * 通过键和hashKey获取数据库hashValue + * @param key 键 + * @param hashKeyList hash键集合 + * @return hash值 + */ + public HV get(K key, HK... hashKeyList); + + /** + * 获取hash值集合 + * @param key 键 + * @return hash值集合 + */ + public List getToList(K key); + + /** + * 存储数据 + * @param key redis键 + * @param map hashMap集合 + */ + public void put(K key, Map map); + + /** + * 存储数据 + * @param key redis键 + * @param dataList 数据值 + * @param hashKey hash键 + */ + public void put(K key, List dataList, Function hashKey); + + /** + * 存储数据 + * @param key redis键 + * @param hashKey hash键 + * @param hashValue hash值 + */ + public void put(K key, HK hashKey, HV hashValue); + + /** + * 通过redis键删除 + * @param key hash键 + */ + public void remove(K key); + + /** + * 通过redis键和hash键删除 + * @param key redis键 + * @param hashKey hash键 + */ + public void remove(K key, HK hashKey); + +} diff --git a/muyu-common/muyu-common-cache/src/main/java/com/muyu/common/cache/abs/HashCacheAbs.java b/muyu-common/muyu-common-cache/src/main/java/com/muyu/common/cache/abs/HashCacheAbs.java new file mode 100644 index 0000000..0f3cec8 --- /dev/null +++ b/muyu-common/muyu-common-cache/src/main/java/com/muyu/common/cache/abs/HashCacheAbs.java @@ -0,0 +1,11 @@ +package com.muyu.common.cache.abs; + +import com.muyu.common.cache.HashCache; + +/** + * @author DongZl + * @description: hash缓存抽象类 + * @Date 2024-3-29 下午 07:40 + */ +public abstract class HashCacheAbs implements HashCache { +} diff --git a/muyu-common/muyu-common-cache/src/main/java/com/muyu/common/cache/decoration/DecorationKey.java b/muyu-common/muyu-common-cache/src/main/java/com/muyu/common/cache/decoration/DecorationKey.java new file mode 100644 index 0000000..284b09a --- /dev/null +++ b/muyu-common/muyu-common-cache/src/main/java/com/muyu/common/cache/decoration/DecorationKey.java @@ -0,0 +1,30 @@ +package com.muyu.common.cache.decoration; + +/** + * @author DongZl + * @description: 装饰Key + * @Date 2024-3-29 下午 03:19 + */ +public interface DecorationKey { + + /** + * key前缀 + * @return key前缀 + */ + public String keyPre(); + + + /** + * 编码 + * @param key ID + * @return 键 + */ + public String encode(K key); + + /** + * 解码 + * @param redisKey 数据库键 + * @return ID + */ + public K decode(String redisKey); +} 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 index 176edad..b5c10f0 100644 --- 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 @@ -1,11 +1,17 @@ package com.muyu.product.cache; +import com.muyu.common.cache.HashCache; import com.muyu.common.cache.abs.CacheAbs; import com.muyu.common.core.text.Convert; +import com.muyu.product.cache.datasource.ProjectInfoData; import com.muyu.product.domain.ProjectInfo; +import com.muyu.product.domain.ProjectSkuInfo; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; -import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.List; +import java.util.function.Function; /** * @author DongZl @@ -15,6 +21,18 @@ import org.springframework.stereotype.Service; @Component public class ProjectInfoCache extends CacheAbs { + public static void main (String[] args) { + Long projectId = 10L; + HashCache hashCache = null; + List projectSkuInfoList = new ArrayList<>(){{ + add(new ProjectSkuInfo()); + add(new ProjectSkuInfo()); + }}; + hashCache.put(projectId, projectSkuInfoList, ProjectSkuInfo::getProjectId); + Long[] longArr = new Long[]{10L,11L,12L,13L,14L,15L}; + hashCache.get(projectId, longArr); + } + @Autowired private ProjectInfoData projectInfoData; /** diff --git a/muyu-modules/muyu-product/muyu-product-cache/src/main/java/com/muyu/product/cache/ProjectSkuCache.java b/muyu-modules/muyu-product/muyu-product-cache/src/main/java/com/muyu/product/cache/ProjectSkuCache.java new file mode 100644 index 0000000..c268357 --- /dev/null +++ b/muyu-modules/muyu-product/muyu-product-cache/src/main/java/com/muyu/product/cache/ProjectSkuCache.java @@ -0,0 +1,9 @@ +package com.muyu.product.cache; + +/** + * @author DongZl + * @description: 商品sku基本信息 + * @Date 2024-3-29 下午 03:06 + */ +public class ProjectSkuCache { +} diff --git a/muyu-modules/muyu-product/muyu-product-cache/src/main/java/com/muyu/product/cache/ProjectSkuStockCache.java b/muyu-modules/muyu-product/muyu-product-cache/src/main/java/com/muyu/product/cache/ProjectSkuStockCache.java new file mode 100644 index 0000000..3e92a40 --- /dev/null +++ b/muyu-modules/muyu-product/muyu-product-cache/src/main/java/com/muyu/product/cache/ProjectSkuStockCache.java @@ -0,0 +1,9 @@ +package com.muyu.product.cache; + +/** + * @author DongZl + * @description: 商品SKU库存缓存 + * @Date 2024-3-29 下午 03:06 + */ +public class ProjectSkuStockCache { +} 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/datasource/ProjectInfoData.java similarity index 88% rename from muyu-modules/muyu-product/muyu-product-cache/src/main/java/com/muyu/product/cache/ProjectInfoData.java rename to muyu-modules/muyu-product/muyu-product-cache/src/main/java/com/muyu/product/cache/datasource/ProjectInfoData.java index 00a8c57..0fb0000 100644 --- 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/datasource/ProjectInfoData.java @@ -1,4 +1,4 @@ -package com.muyu.product.cache; +package com.muyu.product.cache.datasource; import com.muyu.product.domain.ProjectInfo; diff --git a/muyu-modules/muyu-product/muyu-product-server/src/main/java/com/muyu/product/cache/impl/ProjectInfoDataImpl.java b/muyu-modules/muyu-product/muyu-product-server/src/main/java/com/muyu/product/cache/impl/ProjectInfoDataImpl.java index a378803..017380d 100644 --- a/muyu-modules/muyu-product/muyu-product-server/src/main/java/com/muyu/product/cache/impl/ProjectInfoDataImpl.java +++ b/muyu-modules/muyu-product/muyu-product-server/src/main/java/com/muyu/product/cache/impl/ProjectInfoDataImpl.java @@ -1,6 +1,6 @@ package com.muyu.product.cache.impl; -import com.muyu.product.cache.ProjectInfoData; +import com.muyu.product.cache.datasource.ProjectInfoData; import com.muyu.product.domain.ProjectInfo; import com.muyu.product.service.ProjectInfoService; import org.springframework.beans.factory.annotation.Autowired;