refactor: 组服务增加缓存

This commit is contained in:
Argo-Tianyi 2022-01-27 01:45:19 +08:00
parent a987e8eda3
commit 063390e255
1 changed files with 5 additions and 45 deletions

View File

@ -5,12 +5,11 @@
using BootstrapAdmin.Caching; using BootstrapAdmin.Caching;
using BootstrapAdmin.DataAccess.Models; using BootstrapAdmin.DataAccess.Models;
using BootstrapAdmin.Web.Core; using BootstrapAdmin.Web.Core;
using Microsoft.Extensions.Primitives;
using PetaPoco; using PetaPoco;
namespace BootstrapAdmin.DataAccess.PetaPoco.Services; namespace BootstrapAdmin.DataAccess.PetaPoco.Services;
class GroupService : IGroup, IDisposable class GroupService : IGroup
{ {
private const string GroupServiceGetAllCacheKey = "GroupService-GetAll"; private const string GroupServiceGetAllCacheKey = "GroupService-GetAll";
@ -18,10 +17,6 @@ class GroupService : IGroup, IDisposable
private const string GroupServiceGetGroupsByRoleIdCacheKey = "GroupService-GetGroupsByRoleId"; private const string GroupServiceGetGroupsByRoleIdCacheKey = "GroupService-GetGroupsByRoleId";
private CancellationTokenSource? GetGroupsByUserIdCancellationTokenSource { get; set; }
private CancellationTokenSource? GetGroupsByRoleIdCancellationTokenSource { get; set; }
private IDatabase Database { get; } private IDatabase Database { get; }
/// <summary> /// <summary>
@ -41,13 +36,7 @@ class GroupService : IGroup, IDisposable
/// </summary> /// </summary>
/// <param name="userId"></param> /// <param name="userId"></param>
/// <returns></returns> /// <returns></returns>
public List<string> GetGroupsByUserId(string? userId) => CacheManager.GetOrAdd($"{GroupServiceGetGroupsByUserIdCacheKey}-{userId}", entry => public List<string> GetGroupsByUserId(string? userId) => CacheManager.GetOrAdd($"{GroupServiceGetGroupsByUserIdCacheKey}-{userId}", entry => Database.Fetch<string>("select GroupID from UserGroup where UserID = @0", userId));
{
GetGroupsByUserIdCancellationTokenSource = new CancellationTokenSource(TimeSpan.FromMinutes(10));
var token = new CancellationChangeToken(GetGroupsByUserIdCancellationTokenSource.Token);
entry.ExpirationTokens.Add(token);
return Database.Fetch<string>("select GroupID from UserGroup where UserID = @0", userId);
});
/// <summary> /// <summary>
/// ///
@ -71,10 +60,9 @@ class GroupService : IGroup, IDisposable
Database.AbortTransaction(); Database.AbortTransaction();
throw; throw;
} }
if (ret) if (ret)
{ {
GetGroupsByUserIdCancellationTokenSource?.Cancel(); CacheManager.Clear();
} }
return ret; return ret;
} }
@ -84,13 +72,7 @@ class GroupService : IGroup, IDisposable
/// </summary> /// </summary>
/// <param name="roleId"></param> /// <param name="roleId"></param>
/// <returns></returns> /// <returns></returns>
public List<string> GetGroupsByRoleId(string? roleId) => CacheManager.GetOrAdd($"{GroupServiceGetGroupsByRoleIdCacheKey}-{roleId}", entry => public List<string> GetGroupsByRoleId(string? roleId) => CacheManager.GetOrAdd($"{GroupServiceGetGroupsByRoleIdCacheKey}-{roleId}", entry => Database.Fetch<string>("select GroupID from RoleGroup where RoleID = @0", roleId));
{
GetGroupsByRoleIdCancellationTokenSource = new CancellationTokenSource(TimeSpan.FromMinutes(10));
var token = new CancellationChangeToken(GetGroupsByRoleIdCancellationTokenSource.Token);
entry.ExpirationTokens.Add(token);
return Database.Fetch<string>("select GroupID from RoleGroup where RoleID = @0", roleId);
});
/// <summary> /// <summary>
/// ///
@ -117,30 +99,8 @@ class GroupService : IGroup, IDisposable
if (ret) if (ret)
{ {
// reset cache CacheManager.Clear();
GetGroupsByRoleIdCancellationTokenSource?.Cancel();
} }
return ret; return ret;
} }
private void Dispose(bool disposing)
{
if (disposing)
{
GetGroupsByRoleIdCancellationTokenSource?.Cancel();
GetGroupsByRoleIdCancellationTokenSource?.Dispose();
GetGroupsByUserIdCancellationTokenSource?.Cancel();
GetGroupsByUserIdCancellationTokenSource?.Dispose();
}
}
/// <summary>
///
/// </summary>
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
} }