欢迎光临
我的个人博客网站

hangfire 实现已完成的job设置过期,防止数据无限增长


背景

后台作业hangfire用来在后台里执行应用里的一些任务,后台作业是持久性的这意味着即使你的应用程序崩溃了, 后台作业也会在稍后重试并执行。平常我们一般是将数据持久化到存储介质,比如redis。这时候就会带来一个问题,如何防止数据无限扩大,我们可以已完成的job设置过期,防止数据无限增长。

解决方法

1、定义SucceededStateExpireHandler ,继承IStateHandler。

using Hangfire.States; using Hangfire.Storage; using System;  namespace CompanyName.ProjectName.Hangfire.Job.Code {     /// <summary>     /// 已完成的job设置过期,防止数据无限增长     /// </summary>     public class SucceededStateExpireHandler : IStateHandler     {         public TimeSpan JobExpirationTimeout;          public SucceededStateExpireHandler(int jobExpirationTimeout)         {             JobExpirationTimeout = TimeSpan.FromMinutes(jobExpirationTimeout);         }          public string StateName => SucceededState.StateName;          public void Apply(ApplyStateContext context, IWriteOnlyTransaction transaction)         {             context.JobExpirationTimeout = JobExpirationTimeout;         }          public void Unapply(ApplyStateContext context, IWriteOnlyTransaction transaction)         {         }     } }

2、设置过期时间。

    JobExpirationTimeout = TimeSpan.FromMinutes(jobExpirationTimeout);

3、在ConfigureServices进行添加启用。

public IServiceProvider ConfigureServices(IServiceCollection services) { .......................... GlobalStateHandlers.Handlers.Add(new SucceededStateExpireHandler(int.Parse(Configuration["Hangfire:JobExpirationTimeout"]))); }

总结

1、做数据的过期设置还是很有必要的,尤其是大数据量的情况下,可以有效的节约资源,提高速度。

2、对于有效期的时长,就要看自己的业务需要了。

赞(0) 打赏
未经允许不得转载:张拓的天空 » hangfire 实现已完成的job设置过期,防止数据无限增长
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

专业的IT技术经验分享 更专业 更方便

联系我们本站主机

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏