业务描述

  当用户执行完业务操作,或者数据操作后,讲业务记录/数据追踪插入到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();
}
}
catch (Exception ex)
{
Thread.Sleep();
} }
});
}
}

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

业务、数据记录——ThreadPool.QueueUserWorkItem及Redis的实现的更多相关文章

  1. 多线程操作(ThreadPool.QueueUserWorkItem

    主线程: private void GetPolicy_Load(object sender, EventArgs e) { ////ThreadPool.QueueUserWorkItem(new ...

  2. P2P小贷网站业务数据流程分享

    P2P小贷网站业务数据流程分享 引言 这是去年年底开发的一个项目,完成后和用户的衔接没有很好的做起来,所以项目就搁浅了.9月以来,看各路P2P风声水起,很是热闹:这里分享下我的设计文档,算是抛砖引玉, ...

  3. Parallel.ForEach , ThreadPool.QueueUserWorkItem

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  4. ThreadPool.QueueUserWorkItem的性能问题

    在WEB开发中,为了降低页面等待时间提高用户体验,我们往往会把一些浪费时间的操作放到新线程中在后台执行. 简单的实现代码就是: //代码一 new Thread(()=>{ //do somet ...

  5. 清理8组nodes中表的历史数据,平均每个node中的表有1.5亿条记录,需要根据date_created字段清理8000W数据记录,这个字段没有索引。

    清理8组nodes中表的历史数据,平均每个node中的表有1.5亿条记录,需要根据date_created字段清理8000W数据记录,这个字段没有索引. 环境介绍  线上磁盘空间不足,truncate ...

  6. ThreadPool.QueueUserWorkItem引发的血案,线程池异步非正确姿势导致程序闪退的问题

    ThreadPool是.net System.Threading命名空间下的线程池对象.使用QueueUserWorkItem实现对异步委托的先进先出有序的回调.如果在回调的方法里面发生异常则应用程序 ...

  7. SAP 常用业务数据表设计

    表的要求表中使用的字段请尽量参照各模块的SAP字段标准使用习惯:  例:"ZXSLRZX销售组织对应的利润中心"中的销售组织应该使用VKORG.利润中心应该使用PRCTR.根据表的 ...

  8. Azure IoT Hub 十分钟入门系列 (3)- 使用消息路由将原始设备数据记录存档

    本文主要分享一个案例: 10分钟使用消息路由将原始设备数据记录存档 B站视频讲解:https://www.bilibili.com/video/av90223893/ 本文主要有如下内容: 1.理解什 ...

  9. 利用查询条件对象,在Asp.net Web API中实现对业务数据的分页查询处理

    在Asp.net Web API中,对业务数据的分页查询处理是一个非常常见的接口,我们需要在查询条件对象中,定义好相应业务的查询参数,排序信息,请求记录数和每页大小信息等内容,根据这些查询信息,我们在 ...

随机推荐

  1. Android 动态权限申请

    package com.dragon.android.permissionrequest; import android.Manifest; import android.content.Dialog ...

  2. The Quantum L3 router and floating IPs

    This post shows how the Quantum L3 Agent uses the Linux IP stack to implement the Quantum L3 Routing ...

  3. Spark- 求最受欢迎的TopN课程

    数据库操作工具类 package com.rz.mobile_tag.utils import java.sql.{Connection, DriverManager, PreparedStateme ...

  4. node.js+express+jade系列三:404错误的配置

    1:新建一个404.jade 2:在app.js后面配置如下代码 app.use(function(req, res){        res.render("404", {sta ...

  5. 修改(python) mysql 数据库 使其可以支持插入中文

    先建立一个数据库,名字叫xsk #!/usr/bin/python3 # -*- coding:utf-8 -*- import pymsql # 打开数据库连接(本机,用户,密码,数据库名) db ...

  6. [深入学习C#]C#实现多线程的方法:线程(Thread类)和线程池(ThreadPool)

    简介 使用线程的主要原因:应用程序中一些操作需要消耗一定的时间,比如对文件.数据库.网络的访问等等,而我们不希望用户一直等待到操作结束,而是在此同时可以进行一些其他的操作.  这就可以使用线程来实现. ...

  7. Smooks:xml-to-java

    引言: Smooks是一个开源的Java框架,用于处理“数据事件流”.它常常被认为是一个转换框架并以此被用于好几个产品和项目中,包括JBoss ESB(以及其它ESB).然而究其核心,Smooks未提 ...

  8. [BZOJ2806][CTSC2012]熟悉的文章(Cheat)

    bzoj luogu 题目描述 阿米巴是小强的好朋友. 在小强眼中,阿米巴是一个作文成绩很高的文艺青年.为了获取考试作文的真谛,小强向阿米巴求教.阿米巴给小强展示了几篇作文,小强觉得这些文章怎么看怎么 ...

  9. Parallel Programming-Parallel.Invoke

    本文主要介绍Parallel.Invoke的使用. 一.使用例子 class ParallelInvoke { public void Action1() { Thread.Sleep(); Cons ...

  10. python中如何定义main方法

    我们有时写的python模块需要自己测试, 简单方法就是定义main函数, 然后测试自己的模块接口. def main():      test_yourCode() if __name__ == & ...