使用Quartz每分钟执行job,避免数据重复解决方案
- 添加[DisallowConcurrentExecution]属性
- 执行方法时,添加Redis锁
参考如下:
/// <summary> /// 添加 DisallowConcurrentExecution属性 /// 一次只执行一个job,禁止多个job运行 /// </summary> [DisallowConcurrentExecution] public class AutoPass : BaseJob { private readonly ILogger<AutoPass> _logger; public IDatabase _redisDb; private RedisOperate redisHelper; PostgreDbContext _postgreDbContext; public AutoPass(ILogger<AutoPass> logger, IDatabase database, PostgreDbContext postgreDbContext) { _logger = logger; _redisDb = database; redisHelper = new RedisOperate(_redisDb); _postgreDbContext = postgreDbContext; } public override Task ExecuteMethod(IJobExecutionContext context) { _logger.LogError($"AutoPass Execute start..."); return Task.Run(() => { //自动审核逻辑 AutoCheck(); }); } /// <summary> ///自动审核逻辑 /// </summary> private void AutoCheck() { List<string> statusLog = new List<string>(); try { //redis 记录 if (!redisHelper.ActionExecuting("autoverified")) { _logger.LogError($"{DateTime.Now}:AutoCheck 正在批量审核,请稍后再试"); return; } // 业务代码******************** //释放 redis redisHelper.ActionExecuted("autoverified"); _logger.LogError($"{DateTime.Now}:AutoCheck 释放 redis key"); } catch (Exception ex) { //释放 redis redisHelper.ActionExecuted("autoverified"); _logger.LogError($"Error,Message:{ex.Message},StackTrace:{ex.StackTrace}"); } } }
/// <summary> /// 请求开始记录redis,并返回可否继续执行 true:可继续执行 false:不可继续执行 /// </summary> /// <param name="key"></param> /// <returns></returns> public bool ActionExecuting(string key) { var result = _redisDb.HashExistsAsync(key, true); if (!result.Result) { _redisDb.HashIncrementAsync(key, true); _redisDb.KeyExpireAsync(key, new TimeSpan(0, 0, 5, 0)); return true; } else { return false; } } /// <summary> /// 请求结算,删除redis记录 /// </summary> /// <param name="key"></param> public void ActionExecuted(string key) { var result = _redisDb.HashExistsAsync(key, true); if (result.Result) { _redisDb.KeyDeleteAsync(key); } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律