using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using HuanMeng.MiaoYu.Code.DataAccess;
using HuanMeng.MiaoYu.Model.DbSqlServer.Db_MiaoYu;
using Microsoft.Extensions.Caching.Memory;
namespace HuanMeng.MiaoYu.Code.Cache
{
///
/// 人物信息缓存
///
public class CharacterInfoBaseCache
{
private IMemoryCache _memoryCache;
private object _cacheLock = new object(); // 用于线程安全的锁
private const string CharactersCacheKey = "Characters";
private DAO _dao;
public CharacterInfoBaseCache(IMemoryCache memoryCache, DAO dao)
{
this._memoryCache = memoryCache;
this._dao = dao;
}
public List GetCharacterFromCache(int userId)
{
lock (_cacheLock) // 加锁以防止并发访问
{
if (!_memoryCache.TryGetValue(CharactersCacheKey , out List cachedCharacter))
{
// 如果缓存中没有数据,则从数据库中获取
//var db = new YourDbContext();
var character = _dao.daoDbMiaoYu.context.T_Character.ToList();
if (character != null && character.Count > 0)
{
// 将数据放入缓存
var cacheEntryOptions = new MemoryCacheEntryOptions()
.SetAbsoluteExpiration(TimeSpan.FromMinutes(30)) // 设置缓存过期时间
.SetSlidingExpiration(TimeSpan.FromMinutes(5)); // 设置滑动过期时间
_memoryCache.Set(CharactersCacheKey , character, cacheEntryOptions);
cachedCharacter = character;
}
else
{
cachedCharacter = new List();
}
}
return cachedCharacter;
}
}
}
}