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

  • 相关阅读:
    单例模式 2中创建方法
    Interger 与 int
    java equals 和 "==" 比较
    java 小知识点
    对象复制、克隆、深度clone
    onsubmit="return false;"报错
    js 在myeclipse中报错
    struts2 标签 --<<s:url >
    struts2 标签问题----日期显示
    mysql 建表语句
  • 原文地址:https://www.cnblogs.com/lyl6796910/p/14383857.html
Copyright © 2020-2023  润新知