重写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 Infrastructure;
using Microsoft.Extensions.Caching.Distributed;
namespace ZR.Common.Cache
namespace ZR.Infrastructure.Cache
{
public class RedisServer
{
@ -13,7 +12,7 @@ namespace ZR.Common.Cache
{
Cache = new CSRedisClient(AppSettings.GetConfig("RedisServer:Cache"));
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规则
services.Configure<IpRateLimitPolicies>(configuration.GetSection("IpRateLimitPolicies"));
//注入计数器和规则存储
services.AddSingleton<IIpPolicyStore, MemoryCacheIpPolicyStore>();
services.AddSingleton<IRateLimitCounterStore, MemoryCacheRateLimitCounterStore>();
services.AddSingleton<IIpPolicyStore, DistributedCacheIpPolicyStore>();
services.AddSingleton<IRateLimitCounterStore, DistributedCacheRateLimitCounterStore>();
//配置(解析器、计数器密钥生成器)
services.AddSingleton<IRateLimitConfiguration, RateLimitConfiguration>();
services.AddSingleton<IProcessingStrategy, AsyncKeyLockProcessingStrategy>();

View File

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

View File

@ -12,6 +12,6 @@
<ItemGroup>
<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>
</Project>

View File

@ -9,7 +9,7 @@
<ItemGroup>
<PackageReference Include="MiniExcel" Version="1.31.2" />
<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" />
</ItemGroup>
</Project>

View File

@ -13,6 +13,6 @@
<PackageReference Include="Mapster" Version="7.3.0" />
<PackageReference Include="MySqlConnector" Version="2.2.6" />
<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>
</Project>

View File

@ -1,5 +1,4 @@
using ZR.Common;
using ZR.Common.Cache;
using ZR.Infrastructure.Cache;
namespace ZR.ServiceCore.SqlSugar
{
@ -31,7 +30,10 @@ namespace ZR.ServiceCore.SqlSugar
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();
}
@ -51,15 +53,16 @@ namespace ZR.ServiceCore.SqlSugar
}
else
{
var restul = create();
var result = create();
Add(cacheKey, restul, cacheDurationInSeconds);
return restul;
Add(cacheKey, result, cacheDurationInSeconds);
return result;
}
}
public void Remove<V>(string key)
{
// key = key.Split("cache:")[1];
RedisServer.Cache.Del(key);
// CacheHelper.Remove(key);
}

View File

@ -4,12 +4,12 @@ using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using SqlSugar.IOC;
using ZR.Model.System;
using ZR.Infrastructure.Cache;
using ZR.ServiceCore.Model;
namespace ZR.ServiceCore.SqlSugar
{
public static class SqlsugarSetup
public static class SqlSugarSetup
{
private static NLog.Logger logger = NLog.LogManager.GetCurrentClassLogger();
@ -56,6 +56,15 @@ namespace ZR.ServiceCore.SqlSugar
{
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>