业务、数据记录——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();
}
}
catch (Exception ex)
{
Thread.Sleep();
} }
});
}
}
其中需要注意的是和asp.net不同,这个OperationLogConfig.OperationLogStart();的调用必须在Main函数的Run前面。
业务、数据记录——ThreadPool.QueueUserWorkItem及Redis的实现的更多相关文章
- 多线程操作(ThreadPool.QueueUserWorkItem
主线程: private void GetPolicy_Load(object sender, EventArgs e) { ////ThreadPool.QueueUserWorkItem(new ...
- P2P小贷网站业务数据流程分享
P2P小贷网站业务数据流程分享 引言 这是去年年底开发的一个项目,完成后和用户的衔接没有很好的做起来,所以项目就搁浅了.9月以来,看各路P2P风声水起,很是热闹:这里分享下我的设计文档,算是抛砖引玉, ...
- Parallel.ForEach , ThreadPool.QueueUserWorkItem
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- ThreadPool.QueueUserWorkItem的性能问题
在WEB开发中,为了降低页面等待时间提高用户体验,我们往往会把一些浪费时间的操作放到新线程中在后台执行. 简单的实现代码就是: //代码一 new Thread(()=>{ //do somet ...
- 清理8组nodes中表的历史数据,平均每个node中的表有1.5亿条记录,需要根据date_created字段清理8000W数据记录,这个字段没有索引。
清理8组nodes中表的历史数据,平均每个node中的表有1.5亿条记录,需要根据date_created字段清理8000W数据记录,这个字段没有索引. 环境介绍 线上磁盘空间不足,truncate ...
- ThreadPool.QueueUserWorkItem引发的血案,线程池异步非正确姿势导致程序闪退的问题
ThreadPool是.net System.Threading命名空间下的线程池对象.使用QueueUserWorkItem实现对异步委托的先进先出有序的回调.如果在回调的方法里面发生异常则应用程序 ...
- SAP 常用业务数据表设计
表的要求表中使用的字段请尽量参照各模块的SAP字段标准使用习惯: 例:"ZXSLRZX销售组织对应的利润中心"中的销售组织应该使用VKORG.利润中心应该使用PRCTR.根据表的 ...
- Azure IoT Hub 十分钟入门系列 (3)- 使用消息路由将原始设备数据记录存档
本文主要分享一个案例: 10分钟使用消息路由将原始设备数据记录存档 B站视频讲解:https://www.bilibili.com/video/av90223893/ 本文主要有如下内容: 1.理解什 ...
- 利用查询条件对象,在Asp.net Web API中实现对业务数据的分页查询处理
在Asp.net Web API中,对业务数据的分页查询处理是一个非常常见的接口,我们需要在查询条件对象中,定义好相应业务的查询参数,排序信息,请求记录数和每页大小信息等内容,根据这些查询信息,我们在 ...
随机推荐
- 算法(Algorithms)第4版 练习 1.5.23
package com.qiusongde; import edu.princeton.cs.algs4.StdOut; public class Exercise1523 { public stat ...
- CSS3 3D立体柜子实现
1. [图片] 20140811233657.jpg 2. [图片] 120140811233846.jpg 3. [代码][CSS]代码 body { background-color: ...
- EAV模型
了解EAV设计基本原理的最好方法就是理解行建模(row modelling,其中EAV是广义形式). 以一超市数据库为例,必须管理数以千计的产品和品牌,其中许多产品存在期很短暂.那么,显而易见,产品名 ...
- jQuery - 获取/设置内容和属性
获得内容 - text().html() 以及 val() 三个简单实用的用于 DOM 操作的 jQuery 方法: text() - 设置或返回所选元素的文本内容 html() - 设置或返回所选元 ...
- hash算法打散存储文件
1.首先,为防止一个目录下面出现太多文件,所以使用hash算法打散存储 举例代码: int hashcode = filename.hashCode();//得到hashCode int dir1 = ...
- Java企业微信开发_05_消息推送之被动回复消息
一.本节要点 1.消息的加解密 微信加解密包 下载地址:http://qydev.weixin.qq.com/java.zip ,此包中封装好了AES加解密方法,直接调用方法即可. 其中,解 ...
- (转)#ifndef的用法
原文链接:http://wenku.baidu.com/link?url=c4doqVo3U429RkwTN5eaJIfD2rEu-1bLKKQXuqO8drmL359PhUjVmzC7P94wBY9 ...
- stl_pair.h
stl_pair.h // Filename: stl_pair.h // Comment By: 凝霜 // E-mail: mdl2009@vip.qq.com // Blog: http://b ...
- Gym - 100570B :ShortestPath Query(SPFA及其优化)
题意:给定N点M边的有向图,每条边有距离和颜色,一条有效路径上不能有相邻的边颜色相同.现在给定起点S,多次讯问S到点X的最短有效距离. TLE思路:用二维状态dis(u,c)表示起点到u,最后一条边的 ...
- ACM学习历程—HDU5592 ZYB's Premutation(逆序数 && 树状数组 && 二分)(BestCoder Round #65 1003)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5592 题目大意就是给了每个[1, i]区间逆序对的个数,要求复原原序列. 比赛的时候2B了一发. 首先 ...