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、对于有效期的时长,就要看自己的业务需要了。

  • 相关阅读:
    复数加法
    通过函数来实现复数相加
    声明一个类模板
    友元成员函数的简单应用
    将普通函数声明为友元函数
    引用静态数据成员
    对象的赋值
    对象的常引用
    有关对象指针的使用方法
    对象数组的使用方法
  • 原文地址:https://www.cnblogs.com/lyl6796910/p/14383857.html
Copyright © 2011-2022 走看看