Redis分布式队列解决文件并发的问题
1.首先将捕获的异常写到Redis的队列中

public class MyExceptionAttribute : HandleErrorAttribute
{
public static IRedisClientsManager clientManager = new PooledRedisClientManager(new string[] { "127.0.0.1:6379", "192.168.1.2:6379" });
public static IRedisClient redisClent = clientManager.GetClient();
public override void OnException(ExceptionContext filterContext)
{
base.OnException(filterContext);
Exception ex = filterContext.Exception;
//接下来就是得加入到队列中进行处理
redisClent.EnqueueItemOnList("errorMsg", ex.ToString());
//跳转到错误页面
filterContext.HttpContext.Response.Redirect("/Error.html");
}
}
2.然后单独开启一个线程对捕获的数据写到文件中去
public void StartDealLog()
{
string filePath = Server.MapPath("/Log/");
ThreadPool.QueueUserWorkItem((a) =>
{
while (true)
{
if (MyExceptionAttribute.redisClent.GetListCount("errorMsg")>)
{
// Exception ex = MyExceptionAttribute.MyExceptionQueue.Dequeue();
string ex=MyExceptionAttribute .redisClent.DequeueItemFromList("errorMsg");
if (ex != null)
{
//将错误写到日志中取
ILog logger = LogManager.GetLogger("errorMsg");
logger.Error(ex);
}
else
{
Thread.Sleep();
}
}
else
{//将当前线程挂起(就近)
Thread.Sleep();
}
}
},filePath);
}
3.关于上面的代码的思考
对于每一个错误,IIS所在的服务器都会启动一个线程,这对程序服务器压力还是很大的,所以可以考虑使用Redis的分布式,将上面的处理代码单独放到一台异常处理服务器上,可以是一个控制台程序或者网站程序,只要把上面的代码复制过去就可以了
Redis分布式队列解决文件并发的问题的更多相关文章
- Redis分布式锁解决抢购问题
		
转:https://segmentfault.com/a/1190000011421467 废话不多说,首先分享一个业务场景-抢购.一个典型的高并发问题,所需的最关键字段就是库存,在高并发的情况下每次 ...
 - 使用redis分布式锁解决并发线程资源共享问题
		
众所周知, 在多线程中,因为共享全局变量,会导致资源修改结果不一致,所以需要加锁来解决这个问题,保证同一时间只有一个线程对资源进行操作 但是在分布式架构中,我们的服务可能会有n个实例,但线程锁只对同一 ...
 - redis分布式锁解决超卖问题
		
redis事务 redis事务介绍: 1. redis事务可以一次执行多个命令,本质是一组命令的集合. 2.一个事务中的所有命令都会序列化,按顺序串行化的执行而不会被其他命令插入 作用:一个队列 ...
 - Redis分布式队列和缓存更新
		
原文链接:https://www.cnblogs.com/hua66/p/9600085.html 在使用Redis中,我们可能会遇到以下场景: 例如: 某用户向服务器中发送一个请求,服务器将用户请求 ...
 - 使用Redis分布式队列
		
1.这是处理异常的类 public class MyExceptionAttribute:HandleErrorAttribute { //public static Queue<Excepti ...
 - javaWeb 使用线程池+队列解决"订单并发"问题
		
解决方式:使用线程池+队列 项目基于Spring,如果不用spring需要自己把 ThreadPoolManager.java 改成单例模式 1.写一个Controller(Spring mvc) / ...
 - 应用Redis分布式锁解决重复通知的问题
		
研究背景: 这几天被支付宝充值后通知所产生的重复处理问题搞得焦头烂额, 一周连续发生两次重复充钱的杯具, 发事故邮件发到想吐..为了挽回程序员的尊严, 我用了Redis的锁机制. 事故场景: 支付宝下 ...
 - 利用redis 分布式锁 解决集群环境下多次定时任务执行
		
定时任务: @Scheduled(cron= "0 39 3 * * *") public void getAllUnSignData(){ //检查任务锁,若其它节点的相同定时任 ...
 - C#使用读写锁三行代码简单解决多线程并发写入文件时线程同步的问题
		
(补充:初始化FileStream时使用包含文件共享属性(System.IO.FileShare)的构造函数比使用自定义线程锁更为安全和高效,更多内容可点击参阅) 在开发程序的过程中,难免少不了写入错 ...
 
随机推荐
- OpenCV_基于局部自适应阈值的图像二值化
			
在图像处理应用中二值化操作是一个很常用的处理方式,例如零器件图片的处理.文本图片和验证码图片中字符的提取.车牌识别中的字符分割,以及视频图像中的运动目标检测中的前景分割,等等. 较为常用的图像二值化方 ...
 - 关于C++中using namespace std
			
原文链接:http://www.kuqin.com/language/20080107/3532.html <iostream>和<iostream.h>是不一样,前者没有后缀 ...
 - 【树莓派】GSM900模块
			
python代码 https://github.com/JFF-Bohdan/sim-module
 - SVN中Revert changes from this revision 跟Revert to this revision
			
譬如有个文件,有十个版本,假定版本号是1,2,3,4,5,6,7,8,9,10. Revert to this revision: 如果是在版本6这里点击“Revert to this revisio ...
 - 理解BSTR数据类型 神奇的BSTR
			
理解BSTR数据类型 神奇的BSTR - 深蓝的日志 - 网易博客 http://blog.163.com/pugood@126/blog/static/13441759320091111115264 ...
 - CWorkBooks、CWorkBook、CWorkSheets、CWorkSheet、CRange
			
我们使用VC++操作Excel,对于Excel编程来说肯定少不了要遇到六个最基本的类: CApplication.CWorkBook.CWorkBooks.CWorkSheet.CWorkSheets ...
 - 世纪佳缘信息爬取存储到mysql,下载图片到本地,从数据库选取账号对其发送消息更新发信状态
			
利用这种方法,可以把所有会员信息存储下来,多线程发信息,10秒钟就可以对几百个会员完成发信了. 首先是筛选信息后爬取账号信息, #-*-coding:utf-8-*- import requests, ...
 - C# GetType和typeof的区别
			
typeof: The typeof operator is used to obtain the System.Type object for a type. 运算符,获得某一类型的 System. ...
 - MVC3--View层
			
Razor二义性: 1,当view层中出现 邮件格式时候比如 anbylau2130@qq.com 这种情况Razor将会出现多义性 可以使用@@来转义为一个@字符, 如:<p>y ...
 - Javascript中的感叹号和函数function
			
js函数前加分号和感叹号是什么意思?有什么用?:http://www.cnblogs.com/mq0036/p/4605255.html function与感叹号:https://swordair.c ...