using NetAdmin.Application.Services; using NetAdmin.Domain.Dto.Dependency; using NetAdmin.Domain.Dto.Sys.Cache; using NetAdmin.SysComponent.Application.Services.Sys.Dependency; using StackExchange.Redis; namespace NetAdmin.SysComponent.Application.Services.Sys; /// public sealed class CacheService(IConnectionMultiplexer connectionMultiplexer) // : ServiceBase, ICacheService { private readonly InstanceNode _redisInstance; /// /// Initializes a new instance of the class. /// public CacheService(IConnectionMultiplexer connectionMultiplexer, IOptions redisOptions) // : this(connectionMultiplexer) // { _redisInstance = redisOptions.Value.Instances.First(x => x.Name == Chars.FLG_REDIS_INSTANCE_DATA_CACHE); } /// public async Task CacheStatisticsAsync() { var database = connectionMultiplexer.GetDatabase(_redisInstance.Database); return new CacheStatisticsRsp((string)await database.ExecuteAsync("info").ConfigureAwait(false)) { DbSize = (long)await database.ExecuteAsync("dbSize").ConfigureAwait(false) }; } /// public async Task> GetAllEntriesAsync(PagedQueryReq req) { req.ThrowIfInvalid(); var database = connectionMultiplexer.GetDatabase(_redisInstance.Database); var redisResults = (RedisResult[])await database .ExecuteAsync("scan", (req.Page - 1) * req.PageSize, "count" , req.PageSize) .ConfigureAwait(false); var list = ((string[])redisResults![1])!.Where(x => database.KeyType(x) == RedisType.Hash) .Select(x => database.HashGetAll(x) .Append(new HashEntry("key", x)) .ToArray() .ToStringDictionary()) .ToList() .ConvertAll(x => x.Adapt()); return new PagedQueryRsp(req.Page, req.PageSize, 10000, list); } }