zoukankan      html  css  js  c++  java
  • 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、对于有效期的时长,就要看自己的业务需要了。

  • 相关阅读:
    团队项目 NABCD介绍
    java web项目通过外网ip访问
    第七周总结
    全球疫情可视化展示
    第六周总结
    软工小队——团队介绍
    Android端疫情数据统计与现实——Android连接Mysql
    android SDK SDK Manager.exe 无法打开,一闪而过最终解决办法 (转)
    第五周总结
    Java代码编写规范(转)
  • 原文地址:https://www.cnblogs.com/lyl6796910/p/14383857.html
Copyright © 2011-2022 走看看