重写SqlSugar二级缓存模糊删除缓存方法覆盖ICacheService实现类SqlSugarCache中的GetAllKey和Remove方法解决是否含有key前缀不一致问题,ipratelimit接入分布式缓存

This commit is contained in:
YUN-PC5\user 2023-10-08 16:36:32 +08:00
parent c592925096
commit e7fe909fd0
8 changed files with 28 additions and 19 deletions

View File

@ -1,8 +1,7 @@
using CSRedis; using CSRedis;
using Infrastructure; using Infrastructure;
using Microsoft.Extensions.Caching.Distributed;
namespace ZR.Common.Cache namespace ZR.Infrastructure.Cache
{ {
public class RedisServer public class RedisServer
{ {
@ -13,7 +12,7 @@ namespace ZR.Common.Cache
{ {
Cache = new CSRedisClient(AppSettings.GetConfig("RedisServer:Cache")); Cache = new CSRedisClient(AppSettings.GetConfig("RedisServer:Cache"));
Session = new CSRedisClient(AppSettings.GetConfig("RedisServer:Session")); Session = new CSRedisClient(AppSettings.GetConfig("RedisServer:Session"));
RedisHelper.Initialization(Cache); RedisHelper.Initialization(Session);
} }
} }
} }

View File

@ -17,8 +17,8 @@ namespace ZR.Infrastructure.WebExtensions
//从appsettings.json中加载Ip规则 //从appsettings.json中加载Ip规则
services.Configure<IpRateLimitPolicies>(configuration.GetSection("IpRateLimitPolicies")); services.Configure<IpRateLimitPolicies>(configuration.GetSection("IpRateLimitPolicies"));
//注入计数器和规则存储 //注入计数器和规则存储
services.AddSingleton<IIpPolicyStore, MemoryCacheIpPolicyStore>(); services.AddSingleton<IIpPolicyStore, DistributedCacheIpPolicyStore>();
services.AddSingleton<IRateLimitCounterStore, MemoryCacheRateLimitCounterStore>(); services.AddSingleton<IRateLimitCounterStore, DistributedCacheRateLimitCounterStore>();
//配置(解析器、计数器密钥生成器) //配置(解析器、计数器密钥生成器)
services.AddSingleton<IRateLimitConfiguration, RateLimitConfiguration>(); services.AddSingleton<IRateLimitConfiguration, RateLimitConfiguration>();
services.AddSingleton<IProcessingStrategy, AsyncKeyLockProcessingStrategy>(); services.AddSingleton<IProcessingStrategy, AsyncKeyLockProcessingStrategy>();

View File

@ -1,4 +1,3 @@
using System.Reflection;
using AspNetCoreRateLimit; using AspNetCoreRateLimit;
using Infrastructure.Converter; using Infrastructure.Converter;
using Microsoft.AspNetCore.DataProtection; using Microsoft.AspNetCore.DataProtection;
@ -8,9 +7,8 @@ using Microsoft.Extensions.Caching.Distributed;
using Microsoft.Extensions.Caching.Redis; using Microsoft.Extensions.Caching.Redis;
using Microsoft.Extensions.Options; using Microsoft.Extensions.Options;
using Newtonsoft.Json; using Newtonsoft.Json;
using Quartz;
using ZR.Admin.WebApi.Extensions; using ZR.Admin.WebApi.Extensions;
using ZR.Common.Cache; using ZR.Infrastructure.Cache;
using ZR.Infrastructure.Resolver; using ZR.Infrastructure.Resolver;
using ZR.Infrastructure.WebExtensions; using ZR.Infrastructure.WebExtensions;
using ZR.ServiceCore.Model; using ZR.ServiceCore.Model;

View File

@ -12,6 +12,6 @@
<ItemGroup> <ItemGroup>
<PackageReference Include="JinianNet.JNTemplate" Version="2.3.3" /> <PackageReference Include="JinianNet.JNTemplate" Version="2.3.3" />
<PackageReference Include="SqlSugarCoreNoDrive" Version="5.1.4.105" /> <PackageReference Include="SqlSugarCoreNoDrive" Version="5.1.4.109" />
</ItemGroup> </ItemGroup>
</Project> </Project>

View File

@ -9,7 +9,7 @@
<ItemGroup> <ItemGroup>
<PackageReference Include="MiniExcel" Version="1.31.2" /> <PackageReference Include="MiniExcel" Version="1.31.2" />
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" /> <PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
<PackageReference Include="SqlSugarCoreNoDrive" Version="5.1.4.105" /> <PackageReference Include="SqlSugarCoreNoDrive" Version="5.1.4.109" />
<PackageReference Include="System.ComponentModel.Annotations" Version="5.0.0" /> <PackageReference Include="System.ComponentModel.Annotations" Version="5.0.0" />
</ItemGroup> </ItemGroup>
</Project> </Project>

View File

@ -13,6 +13,6 @@
<PackageReference Include="Mapster" Version="7.3.0" /> <PackageReference Include="Mapster" Version="7.3.0" />
<PackageReference Include="MySqlConnector" Version="2.2.6" /> <PackageReference Include="MySqlConnector" Version="2.2.6" />
<PackageReference Include="SqlSugar.IOC" Version="2.0.0" /> <PackageReference Include="SqlSugar.IOC" Version="2.0.0" />
<PackageReference Include="SqlSugarCoreNoDrive" Version="5.1.4.105" /> <PackageReference Include="SqlSugarCoreNoDrive" Version="5.1.4.109" />
</ItemGroup> </ItemGroup>
</Project> </Project>

View File

@ -1,5 +1,4 @@
using ZR.Common; using ZR.Infrastructure.Cache;
using ZR.Common.Cache;
namespace ZR.ServiceCore.SqlSugar namespace ZR.ServiceCore.SqlSugar
{ {
@ -31,7 +30,10 @@ namespace ZR.ServiceCore.SqlSugar
public IEnumerable<string> GetAllKey<V>() public IEnumerable<string> GetAllKey<V>()
{ {
return RedisServer.Cache.Keys("*"); var keys = RedisServer.Cache.Keys("cache:SqlSugarDataCache.*");
// return RedisServer.Cache.Keys("cache:SqlSugarDataCache.*");
keys = keys.Select(it => it.Replace("cache:", "")).ToArray();
return keys;
// return CacheHelper.GetCacheKeys(); // return CacheHelper.GetCacheKeys();
} }
@ -51,15 +53,16 @@ namespace ZR.ServiceCore.SqlSugar
} }
else else
{ {
var restul = create(); var result = create();
Add(cacheKey, restul, cacheDurationInSeconds); Add(cacheKey, result, cacheDurationInSeconds);
return restul; return result;
} }
} }
public void Remove<V>(string key) public void Remove<V>(string key)
{ {
// key = key.Split("cache:")[1];
RedisServer.Cache.Del(key); RedisServer.Cache.Del(key);
// CacheHelper.Remove(key); // CacheHelper.Remove(key);
} }

View File

@ -4,12 +4,12 @@ using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Hosting;
using SqlSugar.IOC; using SqlSugar.IOC;
using ZR.Model.System; using ZR.Infrastructure.Cache;
using ZR.ServiceCore.Model; using ZR.ServiceCore.Model;
namespace ZR.ServiceCore.SqlSugar namespace ZR.ServiceCore.SqlSugar
{ {
public static class SqlsugarSetup public static class SqlSugarSetup
{ {
private static NLog.Logger logger = NLog.LogManager.GetCurrentClassLogger(); private static NLog.Logger logger = NLog.LogManager.GetCurrentClassLogger();
@ -56,6 +56,15 @@ namespace ZR.ServiceCore.SqlSugar
{ {
InitTable.InitDb(); InitTable.InitDb();
} }
StaticConfig.CacheRemoveByLikeStringFunc = (service, key) =>
{
var keyList = RedisServer.Cache.Keys("cache:SqlSugarDataCache" + key + "*");
foreach (var item in keyList)
{
RedisServer.Cache.Del(item.Split("cache:")[1]);
}
};
} }
/// <summary> /// <summary>