fix: 修复统计数量偶发问题

This commit is contained in:
ccnetcore
2025-08-09 12:20:28 +08:00
parent 4681d468ce
commit f3c67cf598
2 changed files with 17 additions and 18 deletions

View File

@@ -23,12 +23,13 @@ public class AccessLogMiddleware : IMiddleware, ITransientDependency
{
_accessLogNumber = 0;
}
internal static int GetAccessLogNumber()
{
return _accessLogNumber;
}
public async Task InvokeAsync(HttpContext context, RequestDelegate next)
{
await next(context);
@@ -64,28 +65,25 @@ public class AccessLogResetEventHandler : ILocalEventHandler<AccessLogResetArgs>
return redisEnabled.IsNullOrEmpty() || bool.Parse(redisEnabled);
}
}
//该事件由job定时10秒触发
public async Task HandleEventAsync(AccessLogResetArgs eventData)
{
if (EnableRedisCache)
{
//分布式锁
if (await RedisClient.SetNxAsync("AccessLogLock",true,TimeSpan.FromSeconds(5)))
if (await RedisClient.SetNxAsync("AccessLogLock", true, TimeSpan.FromSeconds(5)))
{
//自增长数
var incrNumber= AccessLogMiddleware.GetAccessLogNumber();
var incrNumber = AccessLogMiddleware.GetAccessLogNumber();
//立即重置,开始计算,方式丢失
AccessLogMiddleware.ResetAccessLogNumber();
if (incrNumber>0)
if (incrNumber > 0)
{
await RedisClient.IncrByAsync(
$"{CacheKeyPrefix}{AccessLogCacheConst.Key}:{DateTime.Now.Date:yyyyMMdd}", incrNumber);
}
}
}
}
}