背景
后台作业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、对于有效期的时长,就要看自己的业务需要了。
原文转载:http://www.shaoqun.com/a/536579.html
乐宝:https://www.ikjzd.com/w/2200
c2c:https://www.ikjzd.com/w/1576
背景后台作业hangfire用来在后台里执行应用里的一些任务,后台作业是持久性的这意味着即使你的应用程序崩溃了,后台作业也会在稍后重试并执行。平常我们一般是将数据持久化到存储介质,比如redis。这时候就会带来一个问题,如何防止数据无限扩大,我们可以已完成的job设置过期,防止数据无限增长。解决方法1、定义SucceededStateExpireHandler,继承IStateHandler。us
东杰智能:东杰智能
c88:c88
Spredfast:Spredfast
聚合跨境:聚合跨境
亚马逊Alexa再放大招,继"罢工"后再上高潮!:亚马逊Alexa再放大招,继"罢工"后再上高潮!
没有评论:
发表评论