• 业务、数据记录——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前面。

  • 相关阅读:
    (转)python编写登录接口
    (转)Python之文件读写
    (转)python strip()函数 去空格 函数的用法
    (转)模块readline解析
    (转)跟着老男孩一步步学习Shell高级编程实战
    图片服务器优化 解决流量和存储问题
    某大型网站图片服务器改造方案
    雅虎网页优化14条原则
    独立的图片服务器架构
    城市分站设计思路
  • 原文地址:https://www.cnblogs.com/moshanghuakai/p/9627064.html
Copyright © 2020-2023  润新知