• 业务、数据记录——ThreadPool.QueueUserWorkItem及Redis的实现


    业务描述

      当用户执行完业务操作,或者数据操作后,讲业务记录/数据追踪插入到Redis中。ThreadPool.QueueUserWorkItem定时检查队列并将上述数据插入到数据库中持久化。

    实现流程

      1、RedisHelp的实现

      

     /// <summary>
        /// Redison帮助类
        /// </summary>
        public  class RedisCacheHelper
        {
    
            private static IDatabase databse
            {
                get
                {
                    return ConnectionMultiplexer.Connect("127.0.0.1").GetDatabase();
                }
            }
    
            /// <summary>
            /// 业务日志入队
            /// </summary>
            /// <param name="mess"></param>
            public static void EnqueueOperate(string mess)
            {
                databse.ListRightPush("OperateQueue", mess);
            }
            /// <summary>
            /// 业务日志出队
            /// </summary>
            /// <param name="mess"></param>
            public static string DequeueOperate()
            {
                return  databse.ListRightPop("OperateQueue").ToString();
            }
    
            /// <summary>
            ///数据追踪入队
            /// </summary>
            /// <param name="mess"></param>
            public static void EnqueueDataTrack(string mess)
            {
                databse.ListRightPush("DataTrackQueue", mess);
            }
            /// <summary>
            /// 数据追踪出队
            /// </summary>
            /// <param name="mess"></param>
            public static string DequeueDataTrack()
            {
                return databse.ListRightPop("DataTrackQueue").ToString();
            }
        }

    其中,Redsion是用StackExchange.Redis来实现的。主要就是list对象的出队入队操作。

    然后就是ThreadPool.QueueUserWorkItem定时出队

    public static class OperationLogConfig
        {
            public static void OperationLogStart()
            {
                ThreadPool.QueueUserWorkItem(x =>
                {
                    while (true)
                    {
                        try
                        {
                            var Operate = RedisCacheHelper.DequeueOperate();
                            var DataTrack = RedisCacheHelper.DequeueDataTrack();
                            if (!string.IsNullOrEmpty(Operate))
                            {
                                //do something
                            }
                            if (!string.IsNullOrEmpty(DataTrack))
                            {
                                //do something
                            }
                            if (string.IsNullOrEmpty(Operate) && string.IsNullOrEmpty(DataTrack))
                            {
                                Thread.Sleep(60000);
                            }
                        }
                        catch (Exception ex)
                        {
                            Thread.Sleep(60000);
                        }
                        
                    }
                });
            }
        }

    其中需要注意的是和asp.net不同,这个OperationLogConfig.OperationLogStart();的调用必须在Main函数的Run前面。

  • 相关阅读:
    MSSQL_打开xp_cmdshell
    想在win7 32bit的情况下装个64位虚拟机的想法
    查看系统已运行了多久
    sql弄个表结构出来..
    在win下的cmd 的find
    告别google.com.hk的龟速
    VC常用数据类型使用转换详解
    C++中的文件输入/输出ios:xx eat Processing(zz)
    X86汇编语言学习手记(1)
    程序员数据结构笔记
  • 原文地址:https://www.cnblogs.com/moshanghuakai/p/9627064.html
Copyright © 2020-2023  润新知