diff --git a/muyu-common/muyu-common-cache/pom.xml b/muyu-common/muyu-common-cache/pom.xml
new file mode 100644
index 0000000..c6778f0
--- /dev/null
+++ b/muyu-common/muyu-common-cache/pom.xml
@@ -0,0 +1,26 @@
+
+
+ 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/common/cache/Cache.java b/muyu-common/muyu-common-cache/src/main/java/com/muyu/common/cache/Cache.java
new file mode 100644
index 0000000..9d96206
--- /dev/null
+++ b/muyu-common/muyu-common-cache/src/main/java/com/muyu/common/cache/Cache.java
@@ -0,0 +1,43 @@
+package com.muyu.common.cache;
+
+import com.muyu.common.cache.decoration.DecorationKey;
+
+/**
+ * @author DongZl
+ * @description: 缓存接口基类
+ * @Date 2024-3-26 下午 03:25
+ */
+public interface Cache extends DecorationKey {
+
+ /**
+ * 通过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 refreshData (K key);
+}
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..dff5fec
--- /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 HK 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 List 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/CacheAbs.java b/muyu-common/muyu-common-cache/src/main/java/com/muyu/common/cache/abs/CacheAbs.java
new file mode 100644
index 0000000..d2bf765
--- /dev/null
+++ b/muyu-common/muyu-common-cache/src/main/java/com/muyu/common/cache/abs/CacheAbs.java
@@ -0,0 +1,96 @@
+package com.muyu.common.cache.abs;
+
+import com.muyu.common.cache.Cache;
+import com.muyu.common.redis.service.RedisService;
+import org.springframework.beans.factory.annotation.Autowired;
+
+import java.util.concurrent.TimeUnit;
+
+/**
+ * @author DongZl
+ * @description: 缓存抽象类
+ * @Date 2024-3-27 下午 03:10
+ */
+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 refreshData (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/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..126fbf0
--- /dev/null
+++ b/muyu-common/muyu-common-cache/src/main/java/com/muyu/common/cache/abs/HashCacheAbs.java
@@ -0,0 +1,169 @@
+package com.muyu.common.cache.abs;
+
+import com.muyu.common.cache.HashCache;
+import com.muyu.common.redis.service.RedisService;
+import org.springframework.beans.factory.annotation.Autowired;
+
+import java.util.*;
+import java.util.function.Function;
+
+/**
+ * @author DongZl
+ * @description: hash缓存抽象类
+ * @Date 2024-3-29 下午 07:40
+ */
+public abstract class HashCacheAbs implements HashCache {
+
+ @Autowired
+ private RedisService redisService;
+
+ /**
+ * 编码
+ *
+ * @param key ID
+ *
+ * @return 键
+ */
+ @Override
+ public String encode (K key) {
+ return keyPre() + key;
+ }
+
+ /**
+ * 编码
+ * @param hashKey ID
+ * @return 键
+ */
+ @Override
+ public String encodeHashKey (HK hashKey) {
+ return hashKey.toString();
+ }
+
+ /**
+ * 通过Key获取所有的map
+ * @param key 数据库键
+ * @return 所有集合Map
+ */
+ @Override
+ public Map get (K key) {
+ return decodeMap(redisService.getCacheMap(encode(key)));
+ }
+
+ /**
+ * 通过键和hashKey获取数据库hashValue
+ *
+ * @param key 键
+ * @param hashKey hash键
+ *
+ * @return hash值
+ */
+ @Override
+ public HV get (K key, HK hashKey) {
+ return redisService.getCacheMapValue(encode(key), encodeHashKey(hashKey));
+ }
+
+ /**
+ * 通过键和hashKey获取数据库hashValue
+ *
+ * @param key 键
+ * @param hashKeyList hash键集合
+ *
+ * @return hash值
+ */
+ @Override
+ public List get (K key, HK... hashKeyList) {
+ List encodeHashKeyList = Arrays.stream(hashKeyList).map(this::encodeHashKey).toList();
+ return redisService.getMultiCacheMapValue(encode(key), encodeHashKeyList);
+ }
+
+ /**
+ * 获取hash值集合
+ *
+ * @param key 键
+ *
+ * @return hash值集合
+ */
+ @Override
+ public List getToList (K key) {
+ Map hkhvMap = get(key);
+ return hkhvMap.values().stream().toList();
+ }
+
+ /**
+ * 存储数据
+ *
+ * @param key redis键
+ * @param map hashMap集合
+ */
+ @Override
+ public void put (K key, Map map) {
+ redisService.setCacheMap(encode(key), encodeMap(map));
+ }
+
+ /**
+ * 存储数据
+ *
+ * @param key redis键
+ * @param dataList 数据值
+ * @param hashKey hash键
+ */
+ @Override
+ public void put (K key, List dataList, Function hashKey) {
+
+ }
+
+ /**
+ * 存储数据
+ *
+ * @param key redis键
+ * @param hashKey hash键
+ * @param hashValue hash值
+ */
+ @Override
+ public void put (K key, HK hashKey, HV hashValue) {
+
+ }
+
+ /**
+ * 通过redis键删除
+ *
+ * @param key hash键
+ */
+ @Override
+ public void remove (K key) {
+
+ }
+
+ /**
+ * 通过redis键和hash键删除
+ *
+ * @param key redis键
+ * @param hashKey hash键
+ */
+ @Override
+ public void remove (K key, HK hashKey) {
+
+ }
+
+ /**
+ * 原始数据转编码数据
+ * @param dataMap 原始数据
+ * @return 编码数据
+ */
+ private Map encodeMap(Map dataMap){
+ Map encodeDataMap = new HashMap<>();
+ dataMap.forEach((hashKey, HashValue) -> encodeDataMap.put(encodeHashKey(hashKey), HashValue));
+ return encodeDataMap;
+ }
+
+ /**
+ * 编码数据转原始数据
+ * @param encodeDataMap 编码数据
+ * @return 原始数据
+ */
+ private Map decodeMap(Map encodeDataMap){
+ Map dataMap = new HashMap<>();
+ encodeDataMap.forEach((hashKey, hashValue) -> dataMap.put(decodeHashKey(hashKey), hashValue));
+ return dataMap;
+ }
+}
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-common/muyu-common-core/pom.xml b/muyu-common/muyu-common-core/pom.xml
index d7ff491..cd28ded 100644
--- a/muyu-common/muyu-common-core/pom.xml
+++ b/muyu-common/muyu-common-core/pom.xml
@@ -7,6 +7,7 @@
muyu-common
3.6.3
+
4.0.0
muyu-common-core
diff --git a/muyu-common/muyu-common-redis/src/main/java/com/muyu/common/redis/service/RedisService.java b/muyu-common/muyu-common-redis/src/main/java/com/muyu/common/redis/service/RedisService.java
index db90c1e..e5d92bf 100644
--- a/muyu-common/muyu-common-redis/src/main/java/com/muyu/common/redis/service/RedisService.java
+++ b/muyu-common/muyu-common-redis/src/main/java/com/muyu/common/redis/service/RedisService.java
@@ -229,7 +229,7 @@ public class RedisService {
*
* @return Hash对象集合
*/
- public List getMultiCacheMapValue (final String key, final Collection