修改缓存实例

This commit is contained in:
zpc 2024-08-05 04:01:33 +08:00
parent 840eaf6336
commit 37a7c95ada
6 changed files with 174 additions and 55 deletions

View File

@ -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
/// <summary>
///
/// </summary>
public abstract class CommonDataEntityCache<T>(object lockObj, int cacheTime = 36000) where T : class
public abstract class CommonDataEntityCache<T>(object lockObj, int cacheTime = 36000) : ICacheClearData, ICacheReloadData where T : class
{
/// <summary>
///
@ -41,6 +43,7 @@ namespace HuanMeng.MiaoYu.Code.Cache
{
lock (lockObj)
{
tempDataList = MemoryCacheHelper.GetCache<List<T>>(key);
if (tempDataList == null)
{
tempDataList = GetDataList();
@ -59,5 +62,25 @@ namespace HuanMeng.MiaoYu.Code.Cache
/// 获取缓存数据
/// </summary>
public abstract List<T> 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;
}
}
}
}

View File

@ -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
{
/// <summary>
/// 清除缓存
/// </summary>
public interface ICacheClearData
{
/// <summary>
/// 清除数据
/// </summary>
/// <returns></returns>
bool ClearData();
}
}

View File

@ -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
{
/// <summary>
/// 重新加载数据
/// </summary>
public interface ICacheReloadData
{
/// <summary>
/// 重新加载数据
/// </summary>
void ReloadData();
}
}

View File

@ -14,15 +14,11 @@ namespace HuanMeng.MiaoYu.Code.Cache
public partial class MiaoYuCache(DAO dao, IMapper mapper)
{
#region
/// <summary>
/// 对话角色缓存表
/// </summary>
private static object CharacterLock = new object();
/// <summary>
/// 对话角色缓存表
/// </summary>
public MiaoYuDataEntityCache<T_Character>? Character { get; set; }
public CommonDataEntityCache<T_Character>? Character { get; set; }
/// <summary>
/// 角色数据表
/// </summary>
@ -32,7 +28,8 @@ namespace HuanMeng.MiaoYu.Code.Cache
{
if (Character == null)
{
Character = new MiaoYuDataEntityCache<T_Character>(dao, CharacterLock);
//Character = new MiaoYuDataEntityCache<T_Character>(dao, MiaoYuCacheExtend.CharacterLock);
Character = MiaoYuCacheExtend.GetMiaoYuDataEntityCache<T_Character>(dao);
}
return Character.DataList ?? new List<T_Character>();
}
@ -41,15 +38,12 @@ namespace HuanMeng.MiaoYu.Code.Cache
#endregion
#region
/// <summary>
/// 模型缓存表
/// </summary>
private static object ModelConfigLock = new object();
/// <summary>
/// 模型缓存表
/// </summary>
public MiaoYuDataEntityCache<T_Model_Config>? ModelConfig { get; set; }
public CommonDataEntityCache<T_Model_Config>? ModelConfig { get; set; }
/// <summary>
/// 模型
/// </summary>
@ -59,7 +53,8 @@ namespace HuanMeng.MiaoYu.Code.Cache
{
if (ModelConfig == null)
{
ModelConfig = new MiaoYuDataEntityCache<T_Model_Config>(dao, ModelConfigLock);
//ModelConfig = new MiaoYuDataEntityCache<T_Model_Config>(dao, MiaoYuCacheExtend.ModelConfigLock);
ModelConfig = MiaoYuCacheExtend.GetMiaoYuDataEntityCache<T_Model_Config>(dao);
}
return ModelConfig.DataList ?? new List<T_Model_Config>();
}
@ -90,15 +85,12 @@ namespace HuanMeng.MiaoYu.Code.Cache
#endregion
#region
/// <summary>
/// 图片缓存表
/// </summary>
private static object ImageConfigLock = new object();
/// <summary>
/// 图片缓存表
/// </summary>
public MiaoYuDataEntityCache<T_Image_Config>? ImageConfigCache { get; set; }
public CommonDataEntityCache<T_Image_Config>? ImageConfigCache { get; set; }
/// <summary>
/// 图片
/// </summary>
@ -108,7 +100,8 @@ namespace HuanMeng.MiaoYu.Code.Cache
{
if (ImageConfigCache == null)
{
ImageConfigCache = new MiaoYuDataEntityCache<T_Image_Config>(dao, ImageConfigLock);
//ImageConfigCache = new MiaoYuDataEntityCache<T_Image_Config>(dao, MiaoYuCacheExtend.ImageConfigLock);
ImageConfigCache = MiaoYuCacheExtend.GetMiaoYuDataEntityCache<T_Image_Config>(dao);
}
return ImageConfigCache.DataList ?? new List<T_Image_Config>();
}
@ -118,15 +111,12 @@ namespace HuanMeng.MiaoYu.Code.Cache
#region
/// <summary>
///角色类型缓存表
/// </summary>
private static object CharacterTypeLock = new object();
/// <summary>
/// 角色类型缓存表
/// </summary>
public MiaoYuDataEntityCache<T_Character_Type>? CharacterTypeCache { get; set; }
public CommonDataEntityCache<T_Character_Type>? CharacterTypeCache { get; set; }
/// <summary>
/// 角色类型
/// </summary>
@ -136,7 +126,8 @@ namespace HuanMeng.MiaoYu.Code.Cache
{
if (CharacterTypeCache == null)
{
CharacterTypeCache = new MiaoYuDataEntityCache<T_Character_Type>(dao, CharacterTypeLock);
//CharacterTypeCache = new MiaoYuDataEntityCache<T_Character_Type>(dao, MiaoYuCacheExtend.CharacterTypeLock);
CharacterTypeCache = MiaoYuCacheExtend.GetMiaoYuDataEntityCache<T_Character_Type>(dao);
}
return CharacterTypeCache.DataList ?? new List<T_Character_Type>();
}
@ -145,15 +136,12 @@ namespace HuanMeng.MiaoYu.Code.Cache
#endregion
#region
/// <summary>
/// 类型中的角色缓存表
/// </summary>
private static object CharacterTypeIntimacyLock = new object();
/// <summary>
/// 类型中的角色缓存表
/// </summary>
public MiaoYuDataEntityCache<T_Character_Type_Intimacy>? CharacterTypeIntimacyCache { get; set; }
public CommonDataEntityCache<T_Character_Type_Intimacy>? CharacterTypeIntimacyCache { get; set; }
/// <summary>
/// 类型中的角色
/// </summary>
@ -163,7 +151,8 @@ namespace HuanMeng.MiaoYu.Code.Cache
{
if (CharacterTypeIntimacyCache == null)
{
CharacterTypeIntimacyCache = new MiaoYuDataEntityCache<T_Character_Type_Intimacy>(dao, CharacterTypeIntimacyLock);
//CharacterTypeIntimacyCache = new MiaoYuDataEntityCache<T_Character_Type_Intimacy>(dao, MiaoYuCacheExtend.CharacterTypeIntimacyLock);
CharacterTypeIntimacyCache = MiaoYuCacheExtend.GetMiaoYuDataEntityCache<T_Character_Type_Intimacy>(dao);
}
return CharacterTypeIntimacyCache.DataList ?? new List<T_Character_Type_Intimacy>();
}
@ -177,6 +166,78 @@ namespace HuanMeng.MiaoYu.Code.Cache
public static class MiaoYuCacheExtend
{
#region
/// <summary>
/// 对话角色缓存表
/// </summary>
public static object CharacterLock = new object();
/// <summary>
/// 模型缓存表
/// </summary>
public static object ModelConfigLock = new object();
/// <summary>
/// 图片缓存表
/// </summary>
public static object ImageConfigLock = new object();
/// <summary>
///角色类型缓存表
/// </summary>
public static object CharacterTypeLock = new object();
/// <summary>
/// 类型中的角色缓存表
/// </summary>
public static object CharacterTypeIntimacyLock = new object();
/// <summary>
/// 缓存锁对象
/// </summary>
public static Dictionary<Type, object> CacheLockList { get; set; } = new Dictionary<Type, object>
{
{ 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
/// <summary>
/// 获取对应的缓存
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="dao"></param>
/// <returns></returns>
public static CommonDataEntityCache<T> GetMiaoYuDataEntityCache<T>(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<T>(dao, cacheLock);
}
/// <summary>
/// 获取缓存数据
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="dao"></param>
/// <returns></returns>
public static List<T> GetMiaoYuDataEntityCacheList<T>(DAO dao) where T : class
{
var cache = GetMiaoYuDataEntityCache<T>(dao);
return cache?.DataList ?? new List<T>();
}
#endregion
#region
/// <summary>
/// 获取图片
/// </summary>
@ -196,12 +257,11 @@ namespace HuanMeng.MiaoYu.Code.Cache
}
return "";
}
/// <summary>
/// 获取图片
/// </summary>
/// <param name="imageId"></param>
/// <param name="miaoYuCache"></param>
/// <param name="dao"></param>
/// <returns></returns>
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
}
}

View File

@ -18,9 +18,7 @@ namespace HuanMeng.MiaoYu.Code.Cache.Special
/// 锁
/// </summary>
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();
/// <summary>
/// 获取缓存数据
/// </summary>
@ -40,26 +38,21 @@ namespace HuanMeng.MiaoYu.Code.Cache.Special
var characteChatCounts = _dao.daoDbMiaoYu.SqlQueryList<CharacteChatCountModel>(sqlString);
//查询配置表
var modelConfigs = _dao.daoDbMiaoYu.context.T_Model_Config.ToList();
var ImageConfigCache = new MiaoYuDataEntityCache<T_Image_Config>(_dao, ImageLock);
var images = ImageConfigCache.DataList;
//图片
var images = MiaoYuCacheExtend.GetMiaoYuDataEntityCacheList<T_Image_Config>(_dao);
//标签
var labelCache = new MiaoYuDataEntityCache<T_Character_Label>(_dao, T_Character_LabelLock);
var labels = labelCache.DataList;
var labelRelationCache = new MiaoYuDataEntityCache<T_Character_Label_Relation>(_dao, T_Character_Label_RelationLock);
var labelRelations = labelRelationCache.DataList;
var labels = MiaoYuCacheExtend.GetMiaoYuDataEntityCacheList<T_Character_Label>(_dao);
//标签关联表
var labelRelations = MiaoYuCacheExtend.GetMiaoYuDataEntityCacheList<T_Character_Label_Relation>(_dao);
//性格
var personalityCache = new MiaoYuDataEntityCache<T_Character_Personality>(_dao, T_Character_LabelLock);
var personalitys = personalityCache.DataList;
var personalityRelationsCache = new MiaoYuDataEntityCache<T_Character_Personality_Relation>(_dao, T_Character_Label_RelationLock);
var personalityRelations = personalityRelationsCache.DataList;
//性格
var typeCache = new MiaoYuDataEntityCache<T_Character_Type>(_dao, T_Character_LabelLock);
var types = typeCache.DataList;
var typesRelationsCache = new MiaoYuDataEntityCache<T_Character_Type_Intimacy>(_dao, T_Character_Label_RelationLock);
var typesRelations = typesRelationsCache.DataList;
var personalitys = MiaoYuCacheExtend.GetMiaoYuDataEntityCacheList<T_Character_Personality>(_dao);
//性格关联表
var personalityRelations = MiaoYuCacheExtend.GetMiaoYuDataEntityCacheList<T_Character_Personality_Relation>(_dao);
//分类
var types = MiaoYuCacheExtend.GetMiaoYuDataEntityCacheList<T_Character_Type>(_dao); ;
//分类关联表
var typesRelations = MiaoYuCacheExtend.GetMiaoYuDataEntityCacheList<T_Character_Type_Intimacy>(_dao); ;
foreach (var characterCache in characterCaches)
{

View File

@ -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("[是一个。]", "");
}
}
}