using CacheInterface; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; using NewLife.Caching; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Text.Json; using System.Threading.Tasks; namespace CacheService { public class MemoryCacheService : ICacheService { public MemoryCacheService(IServiceProvider services) { Services = services; Logger = Services.GetRequiredService>(); Memory = new MemoryCache(); Logger.LogDebug("加载缓存服务"); } private readonly IServiceProvider Services; private readonly ILogger Logger; private readonly MemoryCache Memory; public Task Set(string key, T value, int ttl = -1) { Logger.LogDebug($"设置缓存{key}:{JsonSerializer.Serialize(value)}"); if (value == null) { Memory.Remove(key); } else { Memory.Set(key, value, ttl); } return Task.CompletedTask; } public Task BatchSet(Dictionary values, int ttl = -1) { Logger.LogDebug($"批量设置缓存:{JsonSerializer.Serialize(values)}"); Memory.SetAll(values, ttl); return Task.CompletedTask; } public Task Get(string key) { Logger.LogDebug($"读取缓存{key}"); T Result = Memory.Get(key); Logger.LogDebug($"{JsonSerializer.Serialize(Result)}"); return Task.FromResult(Result); } public Task> BatchGet(IEnumerable keys) { Logger.LogDebug("批量读取缓存"); Dictionary Result = (Dictionary)Memory.GetAll(keys); Logger.LogDebug($"{JsonSerializer.Serialize(Result)}"); return Task.FromResult(Result); } public Task Delete(string key) { Logger.LogDebug($"删除缓存{key}"); Memory.Remove(key); return Task.CompletedTask; } public Task BatchDelete(params string[] keys) { Logger.LogDebug($"批量删除缓存{JsonSerializer.Serialize(keys)}"); Memory.Remove(keys); return Task.CompletedTask; } public Task> Query(string query, int count = 9999) { Logger.LogDebug($"查询缓存{query}"); var Keys = Memory.Keys.Where(x => x.Contains(query)); var Result = new Dictionary(); if (Keys.Count() > 0) { Result = (Dictionary)Memory.GetAll(Keys); } Logger.LogDebug($"查询缓存{query}:{JsonSerializer.Serialize(Result)}"); return Task.FromResult(Result); } } }