当前位置: 移动技术网 > IT编程>开发语言>.net > 业务、数据记录——ThreadPool.QueueUserWorkItem及Redis的实现

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

2018年09月11日  | 移动技术网IT编程  | 我要评论

善行之铲,姜方舟,农夫导航不准打火机

业务描述

  当用户执行完业务操作,或者数据操作后,讲业务记录/数据追踪插入到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前面。

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网