From f3c67cf5983a2a1a2e691adba35decbd84369356 Mon Sep 17 00:00:00 2001 From: ccnetcore Date: Sat, 9 Aug 2025 12:20:28 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E7=BB=9F=E8=AE=A1?= =?UTF-8?q?=E6=95=B0=E9=87=8F=E5=81=B6=E5=8F=91=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Extensions/AccessLogMiddleware.cs | 16 +++++++--------- .../Yi.Abp.Web/Jobs/bbs/AccessLogStoreJob.cs | 19 ++++++++++--------- 2 files changed, 17 insertions(+), 18 deletions(-) diff --git a/Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Application/Extensions/AccessLogMiddleware.cs b/Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Application/Extensions/AccessLogMiddleware.cs index 24634a61..7f2af7d3 100644 --- a/Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Application/Extensions/AccessLogMiddleware.cs +++ b/Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Application/Extensions/AccessLogMiddleware.cs @@ -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 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); } - - } - } } } \ No newline at end of file diff --git a/Yi.Abp.Net8/src/Yi.Abp.Web/Jobs/bbs/AccessLogStoreJob.cs b/Yi.Abp.Net8/src/Yi.Abp.Web/Jobs/bbs/AccessLogStoreJob.cs index 29f94f1a..7c85059c 100644 --- a/Yi.Abp.Net8/src/Yi.Abp.Web/Jobs/bbs/AccessLogStoreJob.cs +++ b/Yi.Abp.Net8/src/Yi.Abp.Web/Jobs/bbs/AccessLogStoreJob.cs @@ -43,7 +43,7 @@ public class AccessLogStoreJob : HangfireBackgroundWorkerBase { _repository = repository; - + RecurringJobId = "访问日志写入数据库"; //每小时执行一次 CronExpression = "0 0 * * * ?"; @@ -53,10 +53,8 @@ public class AccessLogStoreJob : HangfireBackgroundWorkerBase // Trigger = TriggerBuilder.Create().WithIdentity(nameof(AccessLogStoreJob)) // .WithCronSchedule("0 * * * * ?") // .Build(); - - } - + public override async Task DoWorkAsync(CancellationToken cancellationToken = new CancellationToken()) { @@ -64,7 +62,8 @@ public class AccessLogStoreJob : HangfireBackgroundWorkerBase { //当天的访问量 var number = - await RedisClient.GetAsync($"{CacheKeyPrefix}{AccessLogCacheConst.Key}:{DateTime.Now.Date:yyyyMMdd}"); + await RedisClient.GetAsync( + $"{CacheKeyPrefix}{AccessLogCacheConst.Key}:{DateTime.Now.Date:yyyyMMdd}"); var entity = await _repository._DbQueryable.Where(x => x.AccessLogType == AccessLogTypeEnum.Request) @@ -74,16 +73,18 @@ public class AccessLogStoreJob : HangfireBackgroundWorkerBase if (entity is not null) { - entity.Number = number+1; + entity.Number = number; await _repository.UpdateAsync(entity); } else { - await _repository.InsertAsync((new AccessLogAggregateRoot() { Number = number,AccessLogType = AccessLogTypeEnum.Request})); + await _repository.InsertAsync((new AccessLogAggregateRoot() + { Number = number, AccessLogType = AccessLogTypeEnum.Request })); } - //删除前一天的缓存 - await RedisClient.DelAsync($"{CacheKeyPrefix}{AccessLogCacheConst.Key}:{DateTime.Now.Date.AddDays(-1):yyyyMMdd}"); + //删除前三天的缓存 + await RedisClient.DelAsync( + $"{CacheKeyPrefix}{AccessLogCacheConst.Key}:{DateTime.Now.Date.AddDays(-3):yyyyMMdd}"); } } } \ No newline at end of file