業務描述 當用戶執行完業務操作,或者數據操作後,講業務記錄/數據追蹤插入到Redis中。ThreadPool.QueueUserWorkItem定時檢查隊列並將上述數據插入到資料庫中持久化。 實現流程 1、RedisHelp的實現 其中,Redsion是用StackExchange.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前面。