添加缓存
This commit is contained in:
parent
0c95613ed4
commit
1911844256
|
|
@ -6,6 +6,7 @@ using HuanMeng.DotNetCore.JwtInfrastructure.Interface;
|
|||
using HuanMeng.DotNetCore.MultiTenant;
|
||||
using HuanMeng.DotNetCore.MultiTenant.Contract;
|
||||
using HuanMeng.MiaoYu.Code.Cache;
|
||||
using HuanMeng.MiaoYu.Code.Cache.Contract;
|
||||
using HuanMeng.MiaoYu.Code.DataAccess;
|
||||
|
||||
using HuanMeng.MiaoYu.Code.TencentUtile;
|
||||
|
|
@ -31,7 +32,7 @@ namespace HuanMeng.MiaoYu.Code.Base
|
|||
/// <summary>
|
||||
/// BLL父类
|
||||
/// </summary>
|
||||
public class MiaoYuBase : BLLBase<DAO>
|
||||
public class MiaoYuBase : CacheBase//BLLBase<DAO>
|
||||
{
|
||||
|
||||
public MiaoYuBase(IServiceProvider serviceProvider) : base(serviceProvider)
|
||||
|
|
@ -259,7 +260,7 @@ namespace HuanMeng.MiaoYu.Code.Base
|
|||
if (_miaoYuCache == null)
|
||||
{
|
||||
//new MiaoYuDataEntityCache<T_Character>(Dao).DataList
|
||||
_miaoYuCache = new MiaoYuCache(Dao, Mapper);
|
||||
_miaoYuCache = new MiaoYuCache(this);
|
||||
}
|
||||
return _miaoYuCache;
|
||||
}
|
||||
|
|
|
|||
63
src/0-core/HuanMeng.MiaoYu.Code/Cache/Contract/CacheBase.cs
Normal file
63
src/0-core/HuanMeng.MiaoYu.Code/Cache/Contract/CacheBase.cs
Normal file
|
|
@ -0,0 +1,63 @@
|
|||
using AutoMapper;
|
||||
|
||||
using HuanMeng.DotNetCore.Base;
|
||||
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
|
||||
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 class CacheBase : BLLBase<DAO>
|
||||
{
|
||||
public CacheBase(IServiceProvider serviceProvider) : base(serviceProvider)
|
||||
{
|
||||
}
|
||||
|
||||
#region 数据库
|
||||
private DAO _dao;
|
||||
/// <summary>
|
||||
/// dao 数据库
|
||||
/// </summary>
|
||||
public override DAO Dao
|
||||
{
|
||||
get
|
||||
{
|
||||
if (_dao == null)
|
||||
{
|
||||
_dao = new DAO(_serviceProvider);
|
||||
}
|
||||
return _dao;
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region 映射
|
||||
private IMapper _mapper;
|
||||
|
||||
/// <summary>
|
||||
/// dto映射
|
||||
/// </summary>
|
||||
//[FromServices]
|
||||
public virtual IMapper Mapper
|
||||
{
|
||||
get
|
||||
{
|
||||
if (_mapper == null)
|
||||
{
|
||||
_mapper = _serviceProvider.GetRequiredService<IMapper>();
|
||||
}
|
||||
return _mapper;
|
||||
}
|
||||
set { _mapper = value; }
|
||||
}
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
|
|
@ -15,7 +15,7 @@ namespace HuanMeng.MiaoYu.Code.Cache
|
|||
/// 缓存类
|
||||
/// </summary>
|
||||
/// <param name="dao"></param>
|
||||
public partial class MiaoYuCache(DAO dao, IMapper mapper)
|
||||
public partial class MiaoYuCache(CacheBase cacheBase)
|
||||
{
|
||||
#region 角色缓存表
|
||||
|
||||
|
|
@ -33,7 +33,7 @@ namespace HuanMeng.MiaoYu.Code.Cache
|
|||
if (Character == null)
|
||||
{
|
||||
//Character = new MiaoYuDataEntityCache<T_Character>(dao, MiaoYuCacheExtend.CharacterLock);
|
||||
Character = MiaoYuCacheExtend.GetMiaoYuDataEntityCache<T_Character>(dao);
|
||||
Character = MiaoYuCacheExtend.GetMiaoYuDataEntityCache<T_Character>(cacheBase);
|
||||
}
|
||||
return Character.DataList ?? new List<T_Character>();
|
||||
}
|
||||
|
|
@ -57,8 +57,7 @@ namespace HuanMeng.MiaoYu.Code.Cache
|
|||
{
|
||||
if (ModelConfig == null)
|
||||
{
|
||||
//ModelConfig = new MiaoYuDataEntityCache<T_Model_Config>(dao, MiaoYuCacheExtend.ModelConfigLock);
|
||||
ModelConfig = MiaoYuCacheExtend.GetMiaoYuDataEntityCache<T_Model_Config>(dao);
|
||||
ModelConfig = MiaoYuCacheExtend.GetMiaoYuDataEntityCache<T_Model_Config>(cacheBase);
|
||||
}
|
||||
return ModelConfig.DataList ?? new List<T_Model_Config>();
|
||||
}
|
||||
|
|
@ -70,7 +69,7 @@ namespace HuanMeng.MiaoYu.Code.Cache
|
|||
/// <summary>
|
||||
/// 角色缓存表
|
||||
/// </summary>
|
||||
public CharacterEntityCache? CharacterCache { get; set; }
|
||||
public CommonDataEntityCache<CharacterCache>? CharacterCache { get; set; }
|
||||
/// <summary>
|
||||
/// 角色
|
||||
/// </summary>
|
||||
|
|
@ -80,8 +79,8 @@ namespace HuanMeng.MiaoYu.Code.Cache
|
|||
{
|
||||
if (CharacterCache == null)
|
||||
{
|
||||
|
||||
CharacterCache = new CharacterEntityCache(dao, mapper);
|
||||
CharacterCache = MiaoYuCacheExtend.GetMiaoYuDataEntityCache<CharacterCache>(cacheBase);
|
||||
//CharacterCache = new CharacterEntityCache(cacheBase);
|
||||
}
|
||||
return CharacterCache.DataList ?? new List<CharacterCache>();
|
||||
}
|
||||
|
|
@ -105,7 +104,7 @@ namespace HuanMeng.MiaoYu.Code.Cache
|
|||
if (ImageConfigCache == null)
|
||||
{
|
||||
//ImageConfigCache = new MiaoYuDataEntityCache<T_Image_Config>(dao, MiaoYuCacheExtend.ImageConfigLock);
|
||||
ImageConfigCache = MiaoYuCacheExtend.GetMiaoYuDataEntityCache<T_Image_Config>(dao);
|
||||
ImageConfigCache = MiaoYuCacheExtend.GetMiaoYuDataEntityCache<T_Image_Config>(cacheBase);
|
||||
}
|
||||
return ImageConfigCache.DataList ?? new List<T_Image_Config>();
|
||||
}
|
||||
|
|
@ -131,7 +130,7 @@ namespace HuanMeng.MiaoYu.Code.Cache
|
|||
if (CharacterTypeCache == null)
|
||||
{
|
||||
//CharacterTypeCache = new MiaoYuDataEntityCache<T_Character_Type>(dao, MiaoYuCacheExtend.CharacterTypeLock);
|
||||
CharacterTypeCache = MiaoYuCacheExtend.GetMiaoYuDataEntityCache<T_Character_Type>(dao);
|
||||
CharacterTypeCache = MiaoYuCacheExtend.GetMiaoYuDataEntityCache<T_Character_Type>(cacheBase);
|
||||
}
|
||||
return CharacterTypeCache.DataList ?? new List<T_Character_Type>();
|
||||
}
|
||||
|
|
@ -156,7 +155,7 @@ namespace HuanMeng.MiaoYu.Code.Cache
|
|||
if (CharacterTypeIntimacyCache == null)
|
||||
{
|
||||
//CharacterTypeIntimacyCache = new MiaoYuDataEntityCache<T_Character_Type_Intimacy>(dao, MiaoYuCacheExtend.CharacterTypeIntimacyLock);
|
||||
CharacterTypeIntimacyCache = MiaoYuCacheExtend.GetMiaoYuDataEntityCache<T_Character_Type_Intimacy>(dao);
|
||||
CharacterTypeIntimacyCache = MiaoYuCacheExtend.GetMiaoYuDataEntityCache<T_Character_Type_Intimacy>(cacheBase);
|
||||
}
|
||||
return CharacterTypeIntimacyCache.DataList ?? new List<T_Character_Type_Intimacy>();
|
||||
}
|
||||
|
|
@ -205,7 +204,13 @@ namespace HuanMeng.MiaoYu.Code.Cache
|
|||
{ typeof(T_Image_Config), ImageConfigLock },
|
||||
{ typeof(T_Character_Type), CharacterTypeLock },
|
||||
{ typeof(T_Character_Type_Intimacy), CharacterTypeIntimacyLock },
|
||||
|
||||
};
|
||||
/// <summary>
|
||||
/// 特殊的缓存锁对象
|
||||
/// </summary>
|
||||
public static Dictionary<Type, object> SpecialCacheLockList { get; set; } = new Dictionary<Type, object>
|
||||
{
|
||||
{ typeof(CharacterCache), CharacterLock },
|
||||
};
|
||||
#endregion
|
||||
|
||||
|
|
@ -214,29 +219,35 @@ namespace HuanMeng.MiaoYu.Code.Cache
|
|||
/// 获取对应的缓存
|
||||
/// </summary>
|
||||
/// <typeparam name="T"></typeparam>
|
||||
/// <param name="dao"></param>
|
||||
/// <param name="cacheBase"></param>
|
||||
/// <returns></returns>
|
||||
public static CommonDataEntityCache<T> GetMiaoYuDataEntityCache<T>(DAO dao) where T : class
|
||||
public static CommonDataEntityCache<T> GetMiaoYuDataEntityCache<T>(CacheBase cacheBase) where T : class
|
||||
{
|
||||
object cacheLock;
|
||||
if (!CacheLockList.TryGetValue(typeof(T), out cacheLock))
|
||||
var typeo = typeof(T);
|
||||
if (SpecialCacheLockList.TryGetValue(typeo, out cacheLock))
|
||||
{
|
||||
Console.WriteLine("没有找到锁对象==>" + typeof(T).Name);
|
||||
var o = new CharacterEntityCache(cacheBase, cacheLock) as CommonDataEntityCache<T>;
|
||||
return o;
|
||||
}
|
||||
if (!CacheLockList.TryGetValue(typeo, out cacheLock))
|
||||
{
|
||||
Console.WriteLine("没有找到锁对象==>" + typeo.Name);
|
||||
// 创建一个新的锁对象,并添加到 CacheLockList 中
|
||||
cacheLock = new object();
|
||||
CacheLockList[typeof(T)] = cacheLock;
|
||||
CacheLockList[typeo] = cacheLock;
|
||||
}
|
||||
return new MiaoYuDataEntityCache<T>(dao, cacheLock);
|
||||
return new MiaoYuDataEntityCache<T>(cacheBase, cacheLock);
|
||||
}
|
||||
/// <summary>
|
||||
/// 获取缓存数据
|
||||
/// </summary>
|
||||
/// <typeparam name="T"></typeparam>
|
||||
/// <param name="dao"></param>
|
||||
/// <param name="cacheBase"></param>
|
||||
/// <returns></returns>
|
||||
public static List<T> GetMiaoYuDataEntityCacheList<T>(DAO dao) where T : class
|
||||
public static List<T> GetMiaoYuDataEntityCacheList<T>(CacheBase cacheBase) where T : class
|
||||
{
|
||||
var cache = GetMiaoYuDataEntityCache<T>(dao);
|
||||
var cache = GetMiaoYuDataEntityCache<T>(cacheBase);
|
||||
return cache?.DataList ?? new List<T>();
|
||||
}
|
||||
|
||||
|
|
@ -244,21 +255,44 @@ namespace HuanMeng.MiaoYu.Code.Cache
|
|||
/// 清除全部缓存
|
||||
/// </summary>
|
||||
/// <param name="dao"></param>
|
||||
public static void ClareMiaoYuDataEntityCache(DAO dao)
|
||||
public static void ClareMiaoYuDataEntityCache(CacheBase cacheBase)
|
||||
{
|
||||
foreach (var item in CacheLockList)
|
||||
{
|
||||
var t = item.Key;
|
||||
Type cacheType = typeof(MiaoYuDataEntityCache<>).MakeGenericType(t);
|
||||
var shujuduixiang = Activator.CreateInstance(cacheType, dao, item.Value,36000);
|
||||
var shujuduixiang = Activator.CreateInstance(cacheType, cacheBase, item.Value, 36000);
|
||||
var x = shujuduixiang as ICacheClearData;
|
||||
if (x != null)
|
||||
{
|
||||
x.ClearData();
|
||||
}
|
||||
//new MiaoYuDataEntityCache<T>(dao, cacheLock);
|
||||
//Activator.CreateInstance(t);
|
||||
}
|
||||
var obj = SpecialCacheLockList[typeof(CharacterEntityCache)];
|
||||
CharacterEntityCache characterEntityCache = new CharacterEntityCache(cacheBase, obj);
|
||||
characterEntityCache.ClearData();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 刷新部缓存
|
||||
/// </summary>
|
||||
/// <param name="dao"></param>
|
||||
public static void ReloadMiaoYuDataEntityCache(CacheBase cacheBase)
|
||||
{
|
||||
foreach (var item in CacheLockList)
|
||||
{
|
||||
var t = item.Key;
|
||||
Type cacheType = typeof(MiaoYuDataEntityCache<>).MakeGenericType(t);
|
||||
var shujuduixiang = Activator.CreateInstance(cacheType, cacheBase, item.Value, 36000);
|
||||
var x = shujuduixiang as ICacheReloadData;
|
||||
if (x != null)
|
||||
{
|
||||
x.ReloadData();
|
||||
}
|
||||
}
|
||||
var obj = SpecialCacheLockList[typeof(CharacterEntityCache)];
|
||||
CharacterEntityCache characterEntityCache = new CharacterEntityCache(cacheBase, obj);
|
||||
characterEntityCache.ReloadData();
|
||||
}
|
||||
#endregion
|
||||
|
||||
|
|
@ -288,13 +322,13 @@ namespace HuanMeng.MiaoYu.Code.Cache
|
|||
/// <param name="imageId"></param>
|
||||
/// <param name="dao"></param>
|
||||
/// <returns></returns>
|
||||
public static string GetImageUrl(this int imageId, DAO dao)
|
||||
public static string GetImageUrl(this int imageId, CacheBase cacheBase)
|
||||
{
|
||||
if (imageId == 0 || dao == null)
|
||||
if (imageId == 0 || cacheBase == null)
|
||||
{
|
||||
return "";
|
||||
}
|
||||
MiaoYuCache miaoYuCache = new MiaoYuCache(dao, null);
|
||||
MiaoYuCache miaoYuCache = new MiaoYuCache(cacheBase);
|
||||
|
||||
return GetImageUrl(imageId, miaoYuCache);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
|
||||
|
||||
using HuanMeng.MiaoYu.Code.Cache.Contract;
|
||||
using HuanMeng.MiaoYu.Code.DataAccess;
|
||||
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
|
|
@ -9,9 +10,10 @@ namespace HuanMeng.MiaoYu.Code.Cache
|
|||
/// <summary>
|
||||
/// 妙语数据库实体类缓存
|
||||
/// </summary>
|
||||
public class MiaoYuDataEntityCache<T>(DAO _dao, object lockObj, int cacheTime = 36000)
|
||||
public class MiaoYuDataEntityCache<T>(CacheBase cacheBase, object lockObj, int cacheTime = 36000)
|
||||
: CommonDataEntityCache<T>(lockObj, cacheTime) where T : class
|
||||
{
|
||||
public DataAccess.DAO _dao = cacheBase.Dao;
|
||||
/// <summary>
|
||||
/// 缓存的key
|
||||
/// </summary>
|
||||
|
|
@ -28,7 +30,7 @@ namespace HuanMeng.MiaoYu.Code.Cache
|
|||
/// <returns></returns>
|
||||
public override List<T> GetDataList()
|
||||
{
|
||||
|
||||
|
||||
var dbSet = _dao.daoDbMiaoYu.context.Set<T>().AsNoTracking();
|
||||
if (dbSet == null)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -1,4 +1,6 @@
|
|||
using AutoMapper;
|
||||
|
||||
using HuanMeng.MiaoYu.Code.Cache.Contract;
|
||||
using HuanMeng.MiaoYu.Model.Dto;
|
||||
using HuanMeng.MiaoYu.Model.Dto.Character;
|
||||
using HuanMeng.MiaoYu.Model.Dto.Label;
|
||||
|
|
@ -12,12 +14,13 @@ namespace HuanMeng.MiaoYu.Code.Cache.Special
|
|||
///
|
||||
/// </summary>
|
||||
/// <param name="_dao"></param>
|
||||
public class CharacterEntityCache(DAO _dao, IMapper mapper) : MiaoYuDataEntityCache<CharacterCache>(_dao, CharacterCacheLock)
|
||||
public class CharacterEntityCache(CacheBase cacheBase, object CharacterCacheLock) : MiaoYuDataEntityCache<CharacterCache>(cacheBase, CharacterCacheLock)
|
||||
{
|
||||
/// <summary>
|
||||
/// 锁
|
||||
/// </summary>
|
||||
private static object CharacterCacheLock = new object();
|
||||
private IMapper mapper = cacheBase.Mapper;
|
||||
|
||||
/// <summary>
|
||||
/// 获取缓存数据
|
||||
|
|
@ -27,7 +30,7 @@ namespace HuanMeng.MiaoYu.Code.Cache.Special
|
|||
{
|
||||
List<CharacterCache> characterCaches = new List<CharacterCache>();
|
||||
//读取角色表
|
||||
var characters = _dao.daoDbMiaoYu.context.T_Character.Where(it=>it.Visibility).ToList();
|
||||
var characters = _dao.daoDbMiaoYu.context.T_Character.Where(it => it.Visibility).ToList();
|
||||
if (characters == null)
|
||||
{
|
||||
return characterCaches;
|
||||
|
|
@ -39,24 +42,28 @@ namespace HuanMeng.MiaoYu.Code.Cache.Special
|
|||
//查询配置表
|
||||
var modelConfigs = _dao.daoDbMiaoYu.context.T_Model_Config.ToList();
|
||||
//图片
|
||||
var images = MiaoYuCacheExtend.GetMiaoYuDataEntityCacheList<T_Image_Config>(_dao);
|
||||
var images = MiaoYuCacheExtend.GetMiaoYuDataEntityCacheList<T_Image_Config>(cacheBase);
|
||||
//标签
|
||||
var labels = MiaoYuCacheExtend.GetMiaoYuDataEntityCacheList<T_Character_Label>(_dao);
|
||||
var labels = MiaoYuCacheExtend.GetMiaoYuDataEntityCacheList<T_Character_Label>(cacheBase);
|
||||
//标签关联表
|
||||
var labelRelations = MiaoYuCacheExtend.GetMiaoYuDataEntityCacheList<T_Character_Label_Relation>(_dao);
|
||||
var labelRelations = MiaoYuCacheExtend.GetMiaoYuDataEntityCacheList<T_Character_Label_Relation>(cacheBase);
|
||||
|
||||
//性格
|
||||
var personalitys = MiaoYuCacheExtend.GetMiaoYuDataEntityCacheList<T_Character_Personality>(_dao);
|
||||
var personalitys = MiaoYuCacheExtend.GetMiaoYuDataEntityCacheList<T_Character_Personality>(cacheBase);
|
||||
//性格关联表
|
||||
var personalityRelations = MiaoYuCacheExtend.GetMiaoYuDataEntityCacheList<T_Character_Personality_Relation>(_dao);
|
||||
var personalityRelations = MiaoYuCacheExtend.GetMiaoYuDataEntityCacheList<T_Character_Personality_Relation>(cacheBase);
|
||||
//分类
|
||||
var types = MiaoYuCacheExtend.GetMiaoYuDataEntityCacheList<T_Character_Type>(_dao); ;
|
||||
var types = MiaoYuCacheExtend.GetMiaoYuDataEntityCacheList<T_Character_Type>(cacheBase); ;
|
||||
//分类关联表
|
||||
var typesRelations = MiaoYuCacheExtend.GetMiaoYuDataEntityCacheList<T_Character_Type_Intimacy>(_dao); ;
|
||||
var typesRelations = MiaoYuCacheExtend.GetMiaoYuDataEntityCacheList<T_Character_Type_Intimacy>(cacheBase); ;
|
||||
|
||||
foreach (var characterCache in characterCaches)
|
||||
{
|
||||
var modelConfig = modelConfigs.FirstOrDefault(it => it.Id == characterCache.ModelConfigId);
|
||||
if (modelConfig==null)
|
||||
{
|
||||
modelConfig= modelConfigs.FirstOrDefault();
|
||||
}
|
||||
if (modelConfig != null)
|
||||
{
|
||||
characterCache.ModelConfig = modelConfig;
|
||||
|
|
|
|||
|
|
@ -20,7 +20,17 @@ namespace HuanMeng.MiaoYu.Code.Other
|
|||
/// <returns></returns>
|
||||
public Task CleraCache()
|
||||
{
|
||||
MiaoYuCacheExtend.ClareMiaoYuDataEntityCache(Dao);
|
||||
MiaoYuCacheExtend.ClareMiaoYuDataEntityCache(this);
|
||||
return Task.CompletedTask;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 刷新缓存
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public Task ReloadCache()
|
||||
{
|
||||
MiaoYuCacheExtend.ReloadMiaoYuDataEntityCache(this);
|
||||
return Task.CompletedTask;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user