你的位置:首页 > 软件开发 > ASP.net > 一步步开发自己的博客 番外篇(7、异步记录日志 和 文章阅读量统计)

一步步开发自己的博客 番外篇(7、异步记录日志 和 文章阅读量统计)

发布时间:2015-10-19 10:00:15
前言 离前一篇《一步步开发自己的博客 .NET版(6、手机端的兼容)》都个把月了。当时写完第六篇,很多人问“剧终”了?你还有好多实现没有讲解分析呢。我说没呢,后期还会有第二版、第三版...至于还没有分析到,后期补上。你看,我今天不 ...

前言 

离前一篇《一步步开发自己的博客  .NET版(6、手机端的兼容)》都个把月了。

当时写完第六篇,很多人问“剧终”了?你还有好多实现没有讲解分析呢。我说没呢,后期还会有第二版、第三版...至于还没有分析到,后期补上。你看,我今天不就来了么。一步步开发自己的博客 番外篇(7、异步记录日志 和 文章阅读量统计)

前段时间写代码,手都写的酸痛酸痛的,歇息了几天,好多了。然后,又捣鼓了一下webapi。这也是个没有接触过的知识。跌跌撞撞的整了点东西出来。有兴趣写移动端的同学可以联系我,大家一起学习。API文档和测试地址:http://haojima.net/SwaggerUI 

其他的就不多说了,进入今天的主题,异步记录日志和文章阅读量统计。

一步步开发自己的博客 番外篇(7、异步记录日志 和 文章阅读量统计)     

异步记录日志

我们常用日志记录,无非就是,数据库记录和文本日志记录。而今天我要说的是,文本日志记录。

最简单的文本记录: File.WriteAllText(path,messg); 使用静态类File的WriteAllText 如果文件存在则覆盖,传入文件路径和消息内容。ok,完事。

当然,我们不能每次都覆盖上一次的记录。 File.AppendAllText(path,messg); 那么我们可是在原有内容追加。这里,我们不用关系文件流是否关闭,使用静态类File的这两个方法都会自动帮我们关闭。

如果,我们是使用的get='_blank'>winfrom单线程。那么,基本的日志记录就这个两个方法 完全可以搞定。

但是,如果是web程序就不一样了,天生的多线程。多个线程同时访问一个文件,肯定是会报错的。不信你试试。一步步开发自己的博客 番外篇(7、异步记录日志 和 文章阅读量统计)

那我们怎么解决这个问题?有人会说,加锁呗。锁肯定是要加,不过要看怎么加了。如果加到写文件内容的时候肯定是不合适的。因为写文件要打开文件流,比较耗时。我们可以先把要写的日志,统一存内存,然后单线程从内存取数据,写到文本。当然,写内存也可能会多线程并发,这个时候,我们就可以把锁加到写内存的地方。这里大家就不用担心了,写内存的速度是非常快的,和直接写文件那差的可不是一两个档次的问题了。

我们刚才说存内存,怎么存?当然是存集合了。有个数据类型 Queue 为什么要用它。因为它是队列,有个特点:先进先出。我们取数据的时候就是去的最早存进去的数据了。

使用:存数据 Queue myQ = new Queue(); myQ.Enqueue("The");//入队    取数据 var t = myQ.Dequeue(); 直接在取值的时候就把值在队列中移除了。这样正好免了我手动移除。

那么,很简单。我们记日志的时候就先把日志往 Queue 里存,然后单独开个进程取值存值写文件里。ok,完事。

刚才说了,我们要加锁。是的,要加锁。因为 Queue 并不是线程安全数据。我们在写数据和读数据的时候都要加锁。

static object myLock= new object();...lock (myLock)   logQueue.Enqueue(logmede);//存...lock (myLock)   var m = logQueue.Dequeue();//取

 

海外公司注册、海外银行开户、跨境平台代入驻、VAT、EPR等知识和在线办理:https://www.xlkjsw.com

原标题:一步步开发自己的博客 番外篇(7、异步记录日志 和 文章阅读量统计)

关键词:异步

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。