善行之铲,姜方舟,农夫导航不准打火机
当用户执行完业务操作,或者数据操作后,讲业务记录/数据追踪插入到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前面。
如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复
asp.net搭建博客,使用BlogEngine.NET+MySql搭建博客
网友评论