diff --git a/src/0-core/HuanMeng.MiaoYu.Code/Cache/CommonDataEntityCache.cs b/src/0-core/HuanMeng.MiaoYu.Code/Cache/CommonDataEntityCache.cs
index 86fb00d..fd8775b 100644
--- a/src/0-core/HuanMeng.MiaoYu.Code/Cache/CommonDataEntityCache.cs
+++ b/src/0-core/HuanMeng.MiaoYu.Code/Cache/CommonDataEntityCache.cs
@@ -1,3 +1,5 @@
+using HuanMeng.MiaoYu.Code.Cache.Contract;
+
using Microsoft.EntityFrameworkCore;
using Newtonsoft.Json;
@@ -15,7 +17,7 @@ namespace HuanMeng.MiaoYu.Code.Cache
///
///
///
- public abstract class CommonDataEntityCache(object lockObj, int cacheTime = 36000) where T : class
+ public abstract class CommonDataEntityCache(object lockObj, int cacheTime = 36000) : ICacheClearData, ICacheReloadData where T : class
{
///
///
@@ -41,6 +43,7 @@ namespace HuanMeng.MiaoYu.Code.Cache
{
lock (lockObj)
{
+ tempDataList = MemoryCacheHelper.GetCache>(key);
if (tempDataList == null)
{
tempDataList = GetDataList();
@@ -59,5 +62,25 @@ namespace HuanMeng.MiaoYu.Code.Cache
/// 获取缓存数据
///
public abstract List GetDataList();
+
+ public bool ClearData()
+ {
+ lock (lockObj)
+ {
+ MemoryCacheHelper.DelCache(key);
+ _dataList = null;
+ }
+ return true;
+ }
+
+ public void ReloadData()
+ {
+ lock (lockObj)
+ {
+ var tempDataList = GetDataList();
+ MemoryCacheHelper.SetCache(key, tempDataList, cacheTime);
+ _dataList = tempDataList;
+ }
+ }
}
}
diff --git a/src/0-core/HuanMeng.MiaoYu.Code/Cache/Contract/ICacheClearData.cs b/src/0-core/HuanMeng.MiaoYu.Code/Cache/Contract/ICacheClearData.cs
new file mode 100644
index 0000000..c1afd86
--- /dev/null
+++ b/src/0-core/HuanMeng.MiaoYu.Code/Cache/Contract/ICacheClearData.cs
@@ -0,0 +1,20 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace HuanMeng.MiaoYu.Code.Cache.Contract
+{
+ ///
+ /// 清除缓存
+ ///
+ public interface ICacheClearData
+ {
+ ///
+ /// 清除数据
+ ///
+ ///
+ bool ClearData();
+ }
+}
diff --git a/src/0-core/HuanMeng.MiaoYu.Code/Cache/Contract/ICacheReloadData.cs b/src/0-core/HuanMeng.MiaoYu.Code/Cache/Contract/ICacheReloadData.cs
new file mode 100644
index 0000000..e561517
--- /dev/null
+++ b/src/0-core/HuanMeng.MiaoYu.Code/Cache/Contract/ICacheReloadData.cs
@@ -0,0 +1,19 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace HuanMeng.MiaoYu.Code.Cache.Contract
+{
+ ///
+ /// 重新加载数据
+ ///
+ public interface ICacheReloadData
+ {
+ ///
+ /// 重新加载数据
+ ///
+ void ReloadData();
+ }
+}
diff --git a/src/0-core/HuanMeng.MiaoYu.Code/Cache/MiaoYuCache.cs b/src/0-core/HuanMeng.MiaoYu.Code/Cache/MiaoYuCache.cs
index caa704a..884fcbc 100644
--- a/src/0-core/HuanMeng.MiaoYu.Code/Cache/MiaoYuCache.cs
+++ b/src/0-core/HuanMeng.MiaoYu.Code/Cache/MiaoYuCache.cs
@@ -14,15 +14,11 @@ namespace HuanMeng.MiaoYu.Code.Cache
public partial class MiaoYuCache(DAO dao, IMapper mapper)
{
#region 角色缓存表
- ///
- /// 对话角色缓存表
- ///
- private static object CharacterLock = new object();
///
/// 对话角色缓存表
///
- public MiaoYuDataEntityCache? Character { get; set; }
+ public CommonDataEntityCache? Character { get; set; }
///
/// 角色数据表
///
@@ -32,7 +28,8 @@ namespace HuanMeng.MiaoYu.Code.Cache
{
if (Character == null)
{
- Character = new MiaoYuDataEntityCache(dao, CharacterLock);
+ //Character = new MiaoYuDataEntityCache(dao, MiaoYuCacheExtend.CharacterLock);
+ Character = MiaoYuCacheExtend.GetMiaoYuDataEntityCache(dao);
}
return Character.DataList ?? new List();
}
@@ -41,15 +38,12 @@ namespace HuanMeng.MiaoYu.Code.Cache
#endregion
#region 模型缓存表
- ///
- /// 模型缓存表
- ///
- private static object ModelConfigLock = new object();
+
///
/// 模型缓存表
///
- public MiaoYuDataEntityCache? ModelConfig { get; set; }
+ public CommonDataEntityCache? ModelConfig { get; set; }
///
/// 模型
///
@@ -59,7 +53,8 @@ namespace HuanMeng.MiaoYu.Code.Cache
{
if (ModelConfig == null)
{
- ModelConfig = new MiaoYuDataEntityCache(dao, ModelConfigLock);
+ //ModelConfig = new MiaoYuDataEntityCache(dao, MiaoYuCacheExtend.ModelConfigLock);
+ ModelConfig = MiaoYuCacheExtend.GetMiaoYuDataEntityCache(dao);
}
return ModelConfig.DataList ?? new List();
}
@@ -90,15 +85,12 @@ namespace HuanMeng.MiaoYu.Code.Cache
#endregion
#region 图片缓存表
- ///
- /// 图片缓存表
- ///
- private static object ImageConfigLock = new object();
+
///
/// 图片缓存表
///
- public MiaoYuDataEntityCache? ImageConfigCache { get; set; }
+ public CommonDataEntityCache? ImageConfigCache { get; set; }
///
/// 图片
///
@@ -108,7 +100,8 @@ namespace HuanMeng.MiaoYu.Code.Cache
{
if (ImageConfigCache == null)
{
- ImageConfigCache = new MiaoYuDataEntityCache(dao, ImageConfigLock);
+ //ImageConfigCache = new MiaoYuDataEntityCache(dao, MiaoYuCacheExtend.ImageConfigLock);
+ ImageConfigCache = MiaoYuCacheExtend.GetMiaoYuDataEntityCache(dao);
}
return ImageConfigCache.DataList ?? new List();
}
@@ -118,15 +111,12 @@ namespace HuanMeng.MiaoYu.Code.Cache
#region 角色类型缓存表
- ///
- ///角色类型缓存表
- ///
- private static object CharacterTypeLock = new object();
+
///
/// 角色类型缓存表
///
- public MiaoYuDataEntityCache? CharacterTypeCache { get; set; }
+ public CommonDataEntityCache? CharacterTypeCache { get; set; }
///
/// 角色类型
///
@@ -136,7 +126,8 @@ namespace HuanMeng.MiaoYu.Code.Cache
{
if (CharacterTypeCache == null)
{
- CharacterTypeCache = new MiaoYuDataEntityCache(dao, CharacterTypeLock);
+ //CharacterTypeCache = new MiaoYuDataEntityCache(dao, MiaoYuCacheExtend.CharacterTypeLock);
+ CharacterTypeCache = MiaoYuCacheExtend.GetMiaoYuDataEntityCache(dao);
}
return CharacterTypeCache.DataList ?? new List();
}
@@ -145,15 +136,12 @@ namespace HuanMeng.MiaoYu.Code.Cache
#endregion
#region 角色类型缓存表
- ///
- /// 类型中的角色缓存表
- ///
- private static object CharacterTypeIntimacyLock = new object();
+
///
/// 类型中的角色缓存表
///
- public MiaoYuDataEntityCache? CharacterTypeIntimacyCache { get; set; }
+ public CommonDataEntityCache? CharacterTypeIntimacyCache { get; set; }
///
/// 类型中的角色
///
@@ -163,7 +151,8 @@ namespace HuanMeng.MiaoYu.Code.Cache
{
if (CharacterTypeIntimacyCache == null)
{
- CharacterTypeIntimacyCache = new MiaoYuDataEntityCache(dao, CharacterTypeIntimacyLock);
+ //CharacterTypeIntimacyCache = new MiaoYuDataEntityCache(dao, MiaoYuCacheExtend.CharacterTypeIntimacyLock);
+ CharacterTypeIntimacyCache = MiaoYuCacheExtend.GetMiaoYuDataEntityCache(dao);
}
return CharacterTypeIntimacyCache.DataList ?? new List();
}
@@ -177,6 +166,78 @@ namespace HuanMeng.MiaoYu.Code.Cache
public static class MiaoYuCacheExtend
{
+ #region 缓存锁
+ ///
+ /// 对话角色缓存表
+ ///
+ public static object CharacterLock = new object();
+
+ ///
+ /// 模型缓存表
+ ///
+ public static object ModelConfigLock = new object();
+
+ ///
+ /// 图片缓存表
+ ///
+ public static object ImageConfigLock = new object();
+ ///
+ ///角色类型缓存表
+ ///
+ public static object CharacterTypeLock = new object();
+
+ ///
+ /// 类型中的角色缓存表
+ ///
+ public static object CharacterTypeIntimacyLock = new object();
+
+ ///
+ /// 缓存锁对象
+ ///
+ public static Dictionary CacheLockList { get; set; } = new Dictionary
+ {
+ { typeof(T_Character), CharacterLock },
+ { typeof(T_Model_Config), ModelConfigLock },
+ { typeof(T_Image_Config), ImageConfigLock },
+ { typeof(T_Character_Type), CharacterTypeLock },
+ { typeof(T_Character_Type_Intimacy), CharacterTypeIntimacyLock },
+
+ };
+ #endregion
+
+ #region 缓存扩展
+ ///
+ /// 获取对应的缓存
+ ///
+ ///
+ ///
+ ///
+ public static CommonDataEntityCache GetMiaoYuDataEntityCache(DAO dao) where T : class
+ {
+ object cacheLock;
+ if (!CacheLockList.TryGetValue(typeof(T), out cacheLock))
+ {
+ Console.WriteLine("没有找到锁对象==>"+typeof(T).Name);
+ // 创建一个新的锁对象,并添加到 CacheLockList 中
+ cacheLock = new object();
+ CacheLockList[typeof(T)] = cacheLock;
+ }
+ return new MiaoYuDataEntityCache(dao, cacheLock);
+ }
+ ///
+ /// 获取缓存数据
+ ///
+ ///
+ ///
+ ///
+ public static List GetMiaoYuDataEntityCacheList(DAO dao) where T : class
+ {
+ var cache = GetMiaoYuDataEntityCache(dao);
+ return cache?.DataList ?? new List();
+ }
+ #endregion
+
+ #region 图片扩展
///
/// 获取图片
///
@@ -196,12 +257,11 @@ namespace HuanMeng.MiaoYu.Code.Cache
}
return "";
}
-
///
/// 获取图片
///
///
- ///
+ ///
///
public static string GetImageUrl(this int imageId, DAO dao)
{
@@ -210,8 +270,11 @@ namespace HuanMeng.MiaoYu.Code.Cache
return "";
}
MiaoYuCache miaoYuCache = new MiaoYuCache(dao, null);
-
+
return GetImageUrl(imageId, miaoYuCache);
}
+ #endregion
}
+
+
}
diff --git a/src/0-core/HuanMeng.MiaoYu.Code/Cache/Special/CharacterEntityCache.cs b/src/0-core/HuanMeng.MiaoYu.Code/Cache/Special/CharacterEntityCache.cs
index e64fbb3..b987781 100644
--- a/src/0-core/HuanMeng.MiaoYu.Code/Cache/Special/CharacterEntityCache.cs
+++ b/src/0-core/HuanMeng.MiaoYu.Code/Cache/Special/CharacterEntityCache.cs
@@ -18,9 +18,7 @@ namespace HuanMeng.MiaoYu.Code.Cache.Special
/// 锁
///
private static object CharacterCacheLock = new object();
- private static object ImageLock = new object();
- private static object T_Character_LabelLock = new object();
- private static object T_Character_Label_RelationLock = new object();
+
///
/// 获取缓存数据
///
@@ -40,26 +38,21 @@ namespace HuanMeng.MiaoYu.Code.Cache.Special
var characteChatCounts = _dao.daoDbMiaoYu.SqlQueryList(sqlString);
//查询配置表
var modelConfigs = _dao.daoDbMiaoYu.context.T_Model_Config.ToList();
- var ImageConfigCache = new MiaoYuDataEntityCache(_dao, ImageLock);
- var images = ImageConfigCache.DataList;
+ //图片
+ var images = MiaoYuCacheExtend.GetMiaoYuDataEntityCacheList(_dao);
//标签
- var labelCache = new MiaoYuDataEntityCache(_dao, T_Character_LabelLock);
- var labels = labelCache.DataList;
- var labelRelationCache = new MiaoYuDataEntityCache(_dao, T_Character_Label_RelationLock);
- var labelRelations = labelRelationCache.DataList;
+ var labels = MiaoYuCacheExtend.GetMiaoYuDataEntityCacheList(_dao);
+ //标签关联表
+ var labelRelations = MiaoYuCacheExtend.GetMiaoYuDataEntityCacheList(_dao);
//性格
- var personalityCache = new MiaoYuDataEntityCache(_dao, T_Character_LabelLock);
- var personalitys = personalityCache.DataList;
- var personalityRelationsCache = new MiaoYuDataEntityCache(_dao, T_Character_Label_RelationLock);
- var personalityRelations = personalityRelationsCache.DataList;
-
-
- //性格
- var typeCache = new MiaoYuDataEntityCache(_dao, T_Character_LabelLock);
- var types = typeCache.DataList;
- var typesRelationsCache = new MiaoYuDataEntityCache(_dao, T_Character_Label_RelationLock);
- var typesRelations = typesRelationsCache.DataList;
+ var personalitys = MiaoYuCacheExtend.GetMiaoYuDataEntityCacheList(_dao);
+ //性格关联表
+ var personalityRelations = MiaoYuCacheExtend.GetMiaoYuDataEntityCacheList(_dao);
+ //分类
+ var types = MiaoYuCacheExtend.GetMiaoYuDataEntityCacheList(_dao); ;
+ //分类关联表
+ var typesRelations = MiaoYuCacheExtend.GetMiaoYuDataEntityCacheList(_dao); ;
foreach (var characterCache in characterCaches)
{
diff --git a/src/0-core/HuanMeng.MiaoYu.Model/Dto/Character/CharacterCache.cs b/src/0-core/HuanMeng.MiaoYu.Model/Dto/Character/CharacterCache.cs
index ec89619..9e139db 100644
--- a/src/0-core/HuanMeng.MiaoYu.Model/Dto/Character/CharacterCache.cs
+++ b/src/0-core/HuanMeng.MiaoYu.Model/Dto/Character/CharacterCache.cs
@@ -130,9 +130,10 @@ namespace HuanMeng.MiaoYu.Model.Dto.Character
.Replace("{label}", this.LabelStr) //标签
.Replace("{user_sex}", this.UserSex)
;
+ //去除没有意义的词
if (_system.Contains("[是一个。]"))
{
- _system = _system .Replace("[是一个。]", "");
+ _system = _system.Replace("[是一个。]", "");
}
}
}