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

  • 相关阅读:
    转义将正文中换行符
    THINKPHP短链接设置方法(路由设置)
    MEMCACHE分布式算法(PHP)
    win7下memCache安装过程
    JQUERY根据值将input控件选中!
    Thinkphp CURD中的where方法
    SQL语法LPAD和RPAD
    Linux查看docker容器日志
    Linux中清空docker容器日志
    错误记录——fail: Microsoft.AspNetCore.Server.Kestrel[13]
  • 原文地址:https://www.cnblogs.com/lyl6796910/p/14383857.html
Copyright © 2020-2023  润新知