diff --git a/Infrastructure/ZR.Infrastructure.csproj b/Infrastructure/ZR.Infrastructure.csproj index 7f651dc..ac986db 100644 --- a/Infrastructure/ZR.Infrastructure.csproj +++ b/Infrastructure/ZR.Infrastructure.csproj @@ -12,6 +12,7 @@ + diff --git a/ZR.Admin.WebApi/Program.cs b/ZR.Admin.WebApi/Program.cs index d636823..9c8a844 100644 --- a/ZR.Admin.WebApi/Program.cs +++ b/ZR.Admin.WebApi/Program.cs @@ -3,6 +3,8 @@ using Infrastructure.Converter; using Microsoft.AspNetCore.DataProtection; using NLog.Web; using System.Text.Json; +using BloomFilter; +using BloomFilter.CSRedis.Configurations; using Microsoft.Extensions.Caching.Distributed; using Microsoft.Extensions.Caching.Redis; using Microsoft.Extensions.Options; @@ -64,8 +66,22 @@ if (openRedis == "1") { RedisServer.Initalize(); builder.Services.AddSingleton(new CSRedisCache(RedisHelper.Instance)); + builder.Services.AddBloomFilter(setupAction => + { + setupAction.UseCSRedis(new FilterCSRedisOptions + { + Name = "Redis1", + RedisKey = "BloomFilter", + ConnectionStrings = new List + { + AppSettings.GetConfig("RedisServer:Cache") + } + }); + }); } + + builder.Services.AddMvc(options => { options.Filters.Add(typeof(GlobalActionMonitor));//全局注册 @@ -218,4 +234,8 @@ var json = JsonConvert.SerializeObject(apiResult, new JsonSerializerSettings { ContractResolver = new JsonPropertyContractResolver(props) }); +var provider = builder.Services.BuildServiceProvider(); +var bf = provider.GetService(); +bf.Add("Value"); +Console.WriteLine(bf.Contains("Value")); app.Run(); \ No newline at end of file diff --git a/ZR.ServiceCore/SqlSugar/SqlSugarCache.cs b/ZR.ServiceCore/SqlSugar/SqlSugarCache.cs index 16ce939..d83bd44 100644 --- a/ZR.ServiceCore/SqlSugar/SqlSugarCache.cs +++ b/ZR.ServiceCore/SqlSugar/SqlSugarCache.cs @@ -1,24 +1,39 @@ -using ZR.Infrastructure.Cache; +using BloomFilter; +using ZR.Infrastructure.Cache; namespace ZR.ServiceCore.SqlSugar { public class SqlSugarCache : ICacheService { + private readonly IBloomFilter _bloomFilter; + + public SqlSugarCache(IBloomFilter bloomFilter) + { + _bloomFilter = bloomFilter; + } + public void Add(string key, V value) { RedisServer.Cache.Set(key, value, 3600 + RedisHelper.RandomExpired(5, 30)); // CacheHelper.SetCache(key, value); + _bloomFilter.Add(key); } public void Add(string key, V value, int cacheDurationInSeconds) { RedisServer.Cache.Set(key, value, cacheDurationInSeconds); // CacheHelper.SetCaches(key, value, cacheDurationInSeconds); + _bloomFilter.Add(key); } public bool ContainsKey(string key) { - return RedisServer.Cache.Exists(key); + if (_bloomFilter.Contains(key)) + { + return RedisServer.Cache.Exists(key); + } + + return false; // return CacheHelper.Exists(key); } diff --git a/ZR.ServiceCore/SqlSugar/SqlSugarSetup.cs b/ZR.ServiceCore/SqlSugar/SqlSugarSetup.cs index fea608a..0e2fdcf 100644 --- a/ZR.ServiceCore/SqlSugar/SqlSugarSetup.cs +++ b/ZR.ServiceCore/SqlSugar/SqlSugarSetup.cs @@ -1,4 +1,5 @@ -using Infrastructure; +using BloomFilter; +using Infrastructure; using Infrastructure.Model; using Microsoft.AspNetCore.Hosting; using Microsoft.Extensions.DependencyInjection; @@ -35,7 +36,8 @@ namespace ZR.ServiceCore.SqlSugar }); } SugarIocServices.AddSqlSugar(iocList); - ICacheService cache = new SqlSugarCache(); + var provider = services.BuildServiceProvider(); + ICacheService cache = new SqlSugarCache(provider.GetService()); SugarIocServices.ConfigurationSugar(db => { var u = App.User;