<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom"><title type="text">博客园_Ray Wu</title><subtitle type="text">品技术，品人生!</subtitle><id>http://feed.cnblogs.com/blog/u/19308/rss</id><updated>2012-05-22T01:54:22Z</updated><author><name>Ray Wu</name><uri>http://www.cnblogs.com/drunkyong/</uri></author><generator>feed.cnblogs.com</generator><link rel="alternate" type="text/html" href="http://www.cnblogs.com/drunkyong/"/><link rel="self" type="application/atom+xml" href="http://feed.cnblogs.com/blog/u/19308/rss"/><entry><id>http://www.cnblogs.com/drunkyong/archive/2012/05/22/2512796.html</id><title type="text">10亿记录的分区讨论，高手进</title><summary type="text">我们做的是一个问卷调查系统，每天新增的数据量在300万~500万（答卷表），总数据量已经接近10亿。答卷表结构：QID 问卷IDJID 参与IDTID 题目IDAID 答案ID已经用sql server针对QID做了分区，但是服务器还是有点扛不住。因为数据经常需要做统计分析（统计每个选项被选择了多少次），同时又会被不断的写入。所以考虑将历史数据转移到另一个服务器上。暂定的方案是每天晚上执行作业，将3个月以前的记录移动到历史库里面。（历史库基本上用于统计分析）后续会考虑用sql server 发布与订阅的方式来进行读写分离。不知道大家有没有更好的方案？</summary><published>2012-05-22T01:54:00Z</published><updated>2012-05-22T01:54:00Z</updated><author><name>Ray Wu</name><uri>http://www.cnblogs.com/drunkyong/</uri></author><link rel="alternate" href="http://www.cnblogs.com/drunkyong/archive/2012/05/22/2512796.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/drunkyong/archive/2012/05/22/2512796.html"/><content type="html">&lt;p&gt;我们做的是一个问卷调查系统，每天新增的数据量在300万~500万（答卷表），总数据量已经接近10亿。&lt;/p&gt;&lt;p&gt;答卷表结构：&lt;/p&gt;&lt;p&gt;QID 问卷ID&lt;/p&gt;&lt;p&gt;JID &amp;nbsp;参与ID&lt;/p&gt;&lt;p&gt;TID 题目ID&lt;/p&gt;&lt;p&gt;AID 答案ID&lt;/p&gt;&lt;p&gt;已经用sql server针对QID做了分区，但是服务器还是有点扛不住。&lt;/p&gt;&lt;p&gt;因为数据经常需要做统计分析（统计每个选项被选择了多少次），同时又会被不断的写入。&lt;/p&gt;&lt;p&gt;所以考虑将历史数据转移到另一个服务器上。&lt;/p&gt;&lt;p&gt;暂定的方案是每天晚上执行作业，&lt;span style="color: #ff0000;"&gt;将3个月以前的记录移动到历史库里面&lt;/span&gt;。（历史库基本上用于统计分析）&lt;/p&gt;&lt;p&gt;后续会考虑用sql server &lt;span style="background-color: #ffffff; color: #ff0000;"&gt;发布与订阅的方式来进行读写分离&lt;/span&gt;。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="color: #3366ff;"&gt;不知道大家有没有更好的方案？&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/drunkyong/aggbug/2512796.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/drunkyong/archive/2012/05/22/2512796.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/drunkyong/archive/2012/05/10/2495011.html</id><title type="text">测试问卷星问卷公开的问题</title><summary type="text">http://www.sojump.com/jq/1540481.aspxhttp://www.sojump.com/jq/1540485.aspx</summary><published>2012-05-10T13:34:00Z</published><updated>2012-05-10T13:34:00Z</updated><author><name>Ray Wu</name><uri>http://www.cnblogs.com/drunkyong/</uri></author><link rel="alternate" href="http://www.cnblogs.com/drunkyong/archive/2012/05/10/2495011.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/drunkyong/archive/2012/05/10/2495011.html"/><content type="html">&lt;p&gt;&lt;a href="http://www.sojump.com/jq/1540481.aspx"&gt;http://www.sojump.com/jq/1540481.aspx&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.sojump.com/jq/1540485.aspx"&gt;http://www.sojump.com/jq/1540485.aspx&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/drunkyong/aggbug/2495011.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/drunkyong/archive/2012/05/10/2495011.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/drunkyong/archive/2011/12/01/2270084.html</id><title type="text">asp.net高性能之路：无缝切换HttpRuntime.Cache与Memcached，附代码</title><summary type="text">概述之前网站一直使用asp.net自带的cache，也就是HttpRuntime.Cache。这个的优点是进程内cache，效率非常高，同时对于缓存的对象可以直接获得引用，并进行修改，不需要再进行清空缓存。但是使用HttpRuntime.Cache，无法进行扩展，也无法使用web园等等。方案之前有看dudu写的关于northscale memcached的文章，觉得很不错，故进行了一下尝试。由于初次使用，出问题的时候要能随时切换回HttpRuntime.Cache，故使用了策略模式，实现无缝切换缓存模式的功能。Memcached的封装类请在https://github.com/enyim/En</summary><published>2011-12-01T02:09:00Z</published><updated>2011-12-01T02:09:00Z</updated><author><name>Ray Wu</name><uri>http://www.cnblogs.com/drunkyong/</uri></author><link rel="alternate" href="http://www.cnblogs.com/drunkyong/archive/2011/12/01/2270084.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/drunkyong/archive/2011/12/01/2270084.html"/><content type="html">&lt;p&gt;&lt;strong&gt;概述&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;之前网站一直使用asp.net自带的cache，也就是HttpRuntime.Cache。这个的优点是进程内cache，效率非常高，同时对于缓存的对象可以直接获得&lt;/p&gt;&lt;p&gt;引用，并进行修改，不需要再进行清空缓存。但是使用HttpRuntime.Cache，无法进行扩展，也无法使用web园等等。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;方案&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;之前有看dudu写的&lt;a href="http://www.cnblogs.com/dudu/archive/2010/08/05/1792948.html" target="_blank"&gt;关于northscale memcached&lt;/a&gt;的文章，觉得很不错，故进行了一下尝试。由于初次使用，出问题的时候要能随时切换回HttpRuntime.Cache，&lt;/p&gt;&lt;p&gt;故使用了策略模式，实现无缝切换缓存模式的功能。Memcached的封装类请在&lt;a href="https://github.com/enyim/EnyimMemcached/downloads" target="_blank"&gt;https://github.com/enyim/EnyimMemcached/downloads&lt;/a&gt;进行下载，我使用的是Northscale.Store.2.8&lt;/p&gt;&lt;p&gt;&lt;strong&gt;接口&lt;/strong&gt;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;" onclick="cnblogs_code_show('c00c1345-663a-46c1-9595-b256ceb0dc13')"&gt;&lt;div id="cnblogs_code_open_c00c1345-663a-46c1-9595-b256ceb0dc13" class="cnblogs_code_hide"&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt; System;&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt; System.Collections.Generic;&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt; System.Web;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; 缓存策略接口&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;interface&lt;/span&gt; ICacheStrategy&lt;br /&gt;{&lt;br /&gt;    &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt; AddObject(&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt; objId, &lt;span style="color: #0000ff;"&gt;object&lt;/span&gt; o);&lt;br /&gt;&lt;br /&gt;    &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt; AddObjectWithTimeout(&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt; objId, &lt;span style="color: #0000ff;"&gt;object&lt;/span&gt; o, &lt;span style="color: #0000ff;"&gt;int&lt;/span&gt; timeoutSec);&lt;br /&gt;&lt;br /&gt;    &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt; AddObjectWithFileChange(&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt; objId, &lt;span style="color: #0000ff;"&gt;object&lt;/span&gt; o, &lt;span style="color: #0000ff;"&gt;string&lt;/span&gt; file);&lt;br /&gt;&lt;br /&gt;    &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;void AddObjectWithDepend(string objId, object o, string[] dependKey);&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;    &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt; RemoveObject(&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt; objId);&lt;br /&gt;&lt;br /&gt;    &lt;span style="color: #0000ff;"&gt;object&lt;/span&gt; RetrieveObject(&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt; objId);&lt;br /&gt;&lt;br /&gt;    &lt;span style="color: #0000ff;"&gt;int&lt;/span&gt; TimeOut { &lt;span style="color: #0000ff;"&gt;set&lt;/span&gt;; &lt;span style="color: #0000ff;"&gt;get&lt;/span&gt;; }&lt;br /&gt;}&lt;br /&gt; &lt;/div&gt;&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;HttpRuntime.Cache实现类&lt;/strong&gt;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;" onclick="cnblogs_code_show('364a7b0b-fc14-45ae-9010-8e575f41532b')"&gt;&lt;div id="cnblogs_code_open_364a7b0b-fc14-45ae-9010-8e575f41532b" class="cnblogs_code_hide"&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt; System;&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt; System.Collections.Generic;&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt; System.Web;&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt; System.Web.Caching;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; 默认的缓存策略，实现了缓存策略接口&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;class&lt;/span&gt; DefaultCacheStrategy : ICacheStrategy&lt;br /&gt;{&lt;br /&gt;    &lt;span style="color: #0000ff;"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;static&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;readonly&lt;/span&gt; DefaultCacheStrategy instance = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; DefaultCacheStrategy();&lt;br /&gt;&lt;br /&gt;    &lt;span style="color: #0000ff;"&gt;protected&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;static&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;volatile&lt;/span&gt; System.Web.Caching.Cache webCache = System.Web.HttpRuntime.Cache;&lt;br /&gt;&lt;br /&gt;    &lt;span style="color: #0000ff;"&gt;protected&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;int&lt;/span&gt; _timeOut = &lt;span style="color: #800080;"&gt;1&lt;/span&gt;; &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;默认缓存一分钟，也可以单独设置对象的超时时间&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;    &lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; Initializes the &lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;see cref="DefaultCacheStrategy"/&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt; class.&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&lt;br /&gt;&lt;/span&gt;    &lt;span style="color: #0000ff;"&gt;static&lt;/span&gt; DefaultCacheStrategy()&lt;br /&gt;    {&lt;br /&gt;        &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;lock (syncObj)&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;{&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt; &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;System.Web.HttpContext context = System.Web.HttpContext.Current;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt; &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;if(context != null)&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt; &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt; webCache = context.Cache;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt; &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;else&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt; webCache = System.Web.HttpRuntime.Cache;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;} &lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;    }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;int&lt;/span&gt; TimeOut&lt;br /&gt;    {&lt;br /&gt;        &lt;span style="color: #0000ff;"&gt;set&lt;/span&gt; { _timeOut = value &amp;gt; &lt;span style="color: #800080;"&gt;0&lt;/span&gt; ? value : &lt;span style="color: #800080;"&gt;6000&lt;/span&gt;; }&lt;br /&gt;        &lt;span style="color: #0000ff;"&gt;get&lt;/span&gt; { &lt;span style="color: #0000ff;"&gt;return&lt;/span&gt; _timeOut &amp;gt; &lt;span style="color: #800080;"&gt;0&lt;/span&gt; ? _timeOut : &lt;span style="color: #800080;"&gt;6000&lt;/span&gt;; }&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;static&lt;/span&gt; System.Web.Caching.Cache GetWebCacheObj&lt;br /&gt;    {&lt;br /&gt;        &lt;span style="color: #0000ff;"&gt;get&lt;/span&gt; { &lt;span style="color: #0000ff;"&gt;return&lt;/span&gt; webCache; }&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt; AddObject(&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt; objId, &lt;span style="color: #0000ff;"&gt;object&lt;/span&gt; o)&lt;br /&gt;    {&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (objId == &lt;span style="color: #0000ff;"&gt;null&lt;/span&gt; || objId.Length == &lt;span style="color: #800080;"&gt;0&lt;/span&gt; || o == &lt;span style="color: #0000ff;"&gt;null&lt;/span&gt;)&lt;br /&gt;        {&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;return&lt;/span&gt;;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        CacheItemRemovedCallback callBack = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; CacheItemRemovedCallback(onRemove);&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (TimeOut == &lt;span style="color: #800080;"&gt;6000&lt;/span&gt;)&lt;br /&gt;        {&lt;br /&gt;            webCache.Insert(objId, o, &lt;span style="color: #0000ff;"&gt;null&lt;/span&gt;, DateTime.MaxValue, TimeSpan.Zero, System.Web.Caching.CacheItemPriority.High, callBack);&lt;br /&gt;        }&lt;br /&gt;        &lt;span style="color: #0000ff;"&gt;else&lt;/span&gt;&lt;br /&gt;        {&lt;br /&gt;            webCache.Insert(objId, o, &lt;span style="color: #0000ff;"&gt;null&lt;/span&gt;, DateTime.Now.AddMinutes(TimeOut), System.Web.Caching.Cache.NoSlidingExpiration, System.Web.Caching.CacheItemPriority.High, callBack);&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt; AddObjectWithTimeout(&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt; objId, &lt;span style="color: #0000ff;"&gt;object&lt;/span&gt; o, &lt;span style="color: #0000ff;"&gt;int&lt;/span&gt; timeoutSec)&lt;br /&gt;    {&lt;br /&gt;        &lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (objId == &lt;span style="color: #0000ff;"&gt;null&lt;/span&gt; || objId.Length == &lt;span style="color: #800080;"&gt;0&lt;/span&gt; || o == &lt;span style="color: #0000ff;"&gt;null&lt;/span&gt; || timeoutSec &amp;lt;= &lt;span style="color: #800080;"&gt;0&lt;/span&gt;)&lt;br /&gt;        {&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;return&lt;/span&gt;;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        CacheItemRemovedCallback callBack = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; CacheItemRemovedCallback(onRemove);&lt;br /&gt;&lt;br /&gt;        webCache.Insert(objId, o, &lt;span style="color: #0000ff;"&gt;null&lt;/span&gt;, System.DateTime.Now.AddSeconds(timeoutSec), System.Web.Caching.Cache.NoSlidingExpiration, System.Web.Caching.CacheItemPriority.High, callBack);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt; AddObjectWithFileChange(&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt; objId, &lt;span style="color: #0000ff;"&gt;object&lt;/span&gt; o, &lt;span style="color: #0000ff;"&gt;string&lt;/span&gt; file)&lt;br /&gt;    {&lt;br /&gt;        &lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (objId == &lt;span style="color: #0000ff;"&gt;null&lt;/span&gt; || objId.Length == &lt;span style="color: #800080;"&gt;0&lt;/span&gt; || o == &lt;span style="color: #0000ff;"&gt;null&lt;/span&gt;)&lt;br /&gt;        {&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;return&lt;/span&gt;;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        CacheItemRemovedCallback callBack = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; CacheItemRemovedCallback(onRemove);&lt;br /&gt;&lt;br /&gt;        CacheDependency dep = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; CacheDependency(file);&lt;br /&gt;&lt;br /&gt;        webCache.Insert(objId, o, dep, Cache.NoAbsoluteExpiration, TimeSpan.FromHours(&lt;span style="color: #800080;"&gt;1&lt;/span&gt;), System.Web.Caching.CacheItemPriority.High, callBack);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;public void AddObjectWithDepend(string objId, object o, string[] dependKey)&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;{&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;    if (objId == null || objId.Length == 0 || o == null)&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;    {&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;        return;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;    }&lt;br /&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;    CacheItemRemovedCallback callBack = new CacheItemRemovedCallback(onRemove);&lt;br /&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;    CacheDependency dep = new CacheDependency(null, dependKey, DateTime.Now);&lt;br /&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;    webCache.Insert(objId, o, dep, System.DateTime.Now.AddMinutes(TimeOut), System.Web.Caching.Cache.NoSlidingExpiration, System.Web.Caching.CacheItemPriority.High, callBack);&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;}&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;    &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt; onRemove(&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt; key, &lt;span style="color: #0000ff;"&gt;object&lt;/span&gt; val, CacheItemRemovedReason reason)&lt;br /&gt;    {&lt;br /&gt;        &lt;span style="color: #0000ff;"&gt;switch&lt;/span&gt; (reason)&lt;br /&gt;        {&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;case&lt;/span&gt; CacheItemRemovedReason.DependencyChanged:&lt;br /&gt;                &lt;span style="color: #0000ff;"&gt;break&lt;/span&gt;;&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;case&lt;/span&gt; CacheItemRemovedReason.Expired:&lt;br /&gt;                {&lt;br /&gt;                    &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;CacheItemRemovedCallback callBack = new CacheItemRemovedCallback(this.onRemove);&lt;br /&gt;&lt;br /&gt;                    &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;webCache.Insert(key, val, null, System.DateTime.Now.AddMinutes(TimeOut),&lt;br /&gt;                    &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt; System.Web.Caching.Cache.NoSlidingExpiration,&lt;br /&gt;                    &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt; System.Web.Caching.CacheItemPriority.High,&lt;br /&gt;                    &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt; callBack);&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;                    &lt;span style="color: #0000ff;"&gt;break&lt;/span&gt;;&lt;br /&gt;                }&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;case&lt;/span&gt; CacheItemRemovedReason.Removed:&lt;br /&gt;                {&lt;br /&gt;                    &lt;span style="color: #0000ff;"&gt;break&lt;/span&gt;;&lt;br /&gt;                }&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;case&lt;/span&gt; CacheItemRemovedReason.Underused:&lt;br /&gt;                {&lt;br /&gt;                    &lt;span style="color: #0000ff;"&gt;break&lt;/span&gt;;&lt;br /&gt;                }&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;default&lt;/span&gt;: &lt;span style="color: #0000ff;"&gt;break&lt;/span&gt;;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;TODO: write log here&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;    }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt; RemoveObject(&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt; objId)&lt;br /&gt;    {&lt;br /&gt;        &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;objectTable.Remove(objId);&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;        &lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (objId == &lt;span style="color: #0000ff;"&gt;null&lt;/span&gt; || objId.Length == &lt;span style="color: #800080;"&gt;0&lt;/span&gt;)&lt;br /&gt;        {&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;return&lt;/span&gt;;&lt;br /&gt;        }&lt;br /&gt;        webCache.Remove(objId);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;object&lt;/span&gt; RetrieveObject(&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt; objId)&lt;br /&gt;    {&lt;br /&gt;        &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;return objectTable[objId];&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;        &lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (objId == &lt;span style="color: #0000ff;"&gt;null&lt;/span&gt; || objId.Length == &lt;span style="color: #800080;"&gt;0&lt;/span&gt;)&lt;br /&gt;        {&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;return&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;null&lt;/span&gt;;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: #0000ff;"&gt;return&lt;/span&gt; webCache.Get(objId);&lt;br /&gt;    }&lt;br /&gt;}&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Memcached 实现类&lt;/strong&gt;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;" onclick="cnblogs_code_show('061c988b-c221-4a17-a732-84d9755efddc')"&gt;&lt;div id="cnblogs_code_open_061c988b-c221-4a17-a732-84d9755efddc" class="cnblogs_code_hide"&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt; System;&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt; System.Collections.Generic;&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt; System.Web;&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt; NorthScale.Store;&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt; Enyim.Caching.Memcached;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; Summary description for EnyimMemcachedProvider&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;class&lt;/span&gt; EnyimMemcachedProvider&lt;br /&gt;{&lt;br /&gt;    &lt;br /&gt;        &lt;span style="color: #0000ff;"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;static&lt;/span&gt; NorthScaleClient client;&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: #0000ff;"&gt;static&lt;/span&gt; EnyimMemcachedProvider()&lt;br /&gt;        {&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;try&lt;/span&gt;&lt;br /&gt;            {&lt;br /&gt;                client = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; NorthScaleClient();&lt;br /&gt;            }&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;catch&lt;/span&gt; (Exception ex)&lt;br /&gt;            {&lt;br /&gt;                log4net.LogManager.GetLogger(&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;SojumpLog&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;).Info(&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;EnyimMemcachedProvider&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;, ex);&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: #0000ff;"&gt;#region&lt;/span&gt; ICacheProvider Members&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt; Add(&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt; key, &lt;span style="color: #0000ff;"&gt;object&lt;/span&gt; value)&lt;br /&gt;        {&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (client != &lt;span style="color: #0000ff;"&gt;null&lt;/span&gt;)&lt;br /&gt;            {&lt;br /&gt;                client.Store(StoreMode.Set, key, value);&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt; Add(&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt; key, &lt;span style="color: #0000ff;"&gt;object&lt;/span&gt; value, &lt;span style="color: #0000ff;"&gt;int&lt;/span&gt; cacheSecond)&lt;br /&gt;        {&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (client != &lt;span style="color: #0000ff;"&gt;null&lt;/span&gt;)&lt;br /&gt;            {&lt;br /&gt;                client.Store(StoreMode.Set, key, value, &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; TimeSpan(&lt;span style="color: #800080;"&gt;0&lt;/span&gt;, &lt;span style="color: #800080;"&gt;0&lt;/span&gt;, cacheSecond));&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;object&lt;/span&gt; GetData(&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt; key)&lt;br /&gt;        {&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (client == &lt;span style="color: #0000ff;"&gt;null&lt;/span&gt;)&lt;br /&gt;            {&lt;br /&gt;                &lt;span style="color: #0000ff;"&gt;return&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;null&lt;/span&gt;;&lt;br /&gt;            }&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;return&lt;/span&gt; client.Get(key);&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt; Remove(&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt; key)&lt;br /&gt;        {&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (client != &lt;span style="color: #0000ff;"&gt;null&lt;/span&gt;)&lt;br /&gt;            {&lt;br /&gt;                client.Remove(key);&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: #0000ff;"&gt;#endregion&lt;/span&gt;&lt;br /&gt;    &lt;br /&gt;}&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;策略类&lt;/strong&gt;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;" onclick="cnblogs_code_show('43f33e44-3b0e-4287-bbe4-f91f883cde4a')"&gt;&lt;div id="cnblogs_code_open_43f33e44-3b0e-4287-bbe4-f91f883cde4a" class="cnblogs_code_hide"&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt; System;&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt; System.Collections.Generic;&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt; System.Web;&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt; System.Configuration;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; The caching manager&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;class&lt;/span&gt; CachingManager&lt;br /&gt;{&lt;br /&gt;    &lt;span style="color: #0000ff;"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;static&lt;/span&gt; ICacheStrategy cs;&lt;br /&gt;    &lt;span style="color: #0000ff;"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;static&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;volatile&lt;/span&gt; CachingManager instance = &lt;span style="color: #0000ff;"&gt;null&lt;/span&gt;;&lt;br /&gt;    &lt;span style="color: #0000ff;"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;static&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;object&lt;/span&gt; lockHelper = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;object&lt;/span&gt;();&lt;br /&gt;&lt;br /&gt;    &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;private static System.Timers.Timer cacheConfigTimer = new System.Timers.Timer(15000);&lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;Interval in ms&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;   &lt;span style="color: #0000ff;"&gt;static&lt;/span&gt; CachingManager()&lt;br /&gt;    {&lt;br /&gt;        &lt;span style="color: #0000ff;"&gt;string&lt;/span&gt; type = ConfigurationManager.AppSettings[&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;CacheStrategy&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;];&lt;br /&gt;        &lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (type == &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;2&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;)&lt;br /&gt;            cs = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; MemCacheStrategy();&lt;br /&gt;        &lt;span style="color: #0000ff;"&gt;else&lt;/span&gt;&lt;br /&gt;            cs = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; DefaultCacheStrategy();&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt;/Set timer&lt;/span&gt;&lt;span style="color: #808080;"&gt;&lt;br /&gt;&lt;/span&gt;        &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;cacheConfigTimer.AutoReset = true;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;cacheConfigTimer.Enabled = true;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;cacheConfigTimer.Elapsed += new System.Timers.ElapsedEventHandler(Timer_Elapsed);&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;cacheConfigTimer.Start();&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;    }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    &lt;span style="color: #0000ff;"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;static&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt; Timer_Elapsed(&lt;span style="color: #0000ff;"&gt;object&lt;/span&gt; sender, System.Timers.ElapsedEventArgs e)&lt;br /&gt;    {&lt;br /&gt;        &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;TODO:&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;    }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;static&lt;/span&gt; CachingManager GetCachingService()&lt;br /&gt;    {&lt;br /&gt;        &lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (instance == &lt;span style="color: #0000ff;"&gt;null&lt;/span&gt;)&lt;br /&gt;        {&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;lock&lt;/span&gt; (lockHelper)&lt;br /&gt;            {&lt;br /&gt;                &lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (instance == &lt;span style="color: #0000ff;"&gt;null&lt;/span&gt;)&lt;br /&gt;                {&lt;br /&gt;                    instance = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; CachingManager();&lt;br /&gt;                }&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: #0000ff;"&gt;return&lt;/span&gt; instance;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;virtual&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt; AddObject(&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt; key, &lt;span style="color: #0000ff;"&gt;object&lt;/span&gt; o)&lt;br /&gt;    {&lt;br /&gt;        &lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (String.IsNullOrEmpty(key) || o == &lt;span style="color: #0000ff;"&gt;null&lt;/span&gt;) &lt;span style="color: #0000ff;"&gt;return&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: #0000ff;"&gt;lock&lt;/span&gt; (lockHelper)&lt;br /&gt;        {&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (cs.TimeOut &amp;lt;= &lt;span style="color: #800080;"&gt;0&lt;/span&gt;) &lt;span style="color: #0000ff;"&gt;return&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;            cs.AddObject(key, o);&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;virtual&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt; AddObject(&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt; key, &lt;span style="color: #0000ff;"&gt;object&lt;/span&gt; o, &lt;span style="color: #0000ff;"&gt;int&lt;/span&gt; timeout)&lt;br /&gt;    {&lt;br /&gt;        &lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (String.IsNullOrEmpty(key) || o == &lt;span style="color: #0000ff;"&gt;null&lt;/span&gt;) &lt;span style="color: #0000ff;"&gt;return&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: #0000ff;"&gt;lock&lt;/span&gt; (lockHelper)&lt;br /&gt;        {&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (cs.TimeOut &amp;lt;= &lt;span style="color: #800080;"&gt;0&lt;/span&gt;) &lt;span style="color: #0000ff;"&gt;return&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;            cs.AddObjectWithTimeout(key, o, timeout);&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;virtual&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt; AddObject(&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt; key, &lt;span style="color: #0000ff;"&gt;object&lt;/span&gt; o, &lt;span style="color: #0000ff;"&gt;string&lt;/span&gt; file)&lt;br /&gt;    {&lt;br /&gt;        &lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (String.IsNullOrEmpty(key) || o == &lt;span style="color: #0000ff;"&gt;null&lt;/span&gt;) &lt;span style="color: #0000ff;"&gt;return&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: #0000ff;"&gt;lock&lt;/span&gt; (lockHelper)&lt;br /&gt;        {&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (cs.TimeOut &amp;lt;= &lt;span style="color: #800080;"&gt;0&lt;/span&gt;) &lt;span style="color: #0000ff;"&gt;return&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;            cs.AddObjectWithFileChange(key, o, file);&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;virtual&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;object&lt;/span&gt; RetrieveObject(&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt; objectId)&lt;br /&gt;    {&lt;br /&gt;        &lt;span style="color: #0000ff;"&gt;return&lt;/span&gt; cs.RetrieveObject(objectId);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;virtual&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt; RemoveObject(&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt; key)&lt;br /&gt;    {&lt;br /&gt;        &lt;span style="color: #0000ff;"&gt;lock&lt;/span&gt; (lockHelper)&lt;br /&gt;        {&lt;br /&gt;            cs.RemoveObject(key);&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt; LoadCacheStrategy(ICacheStrategy ics)&lt;br /&gt;    {&lt;br /&gt;        &lt;span style="color: #0000ff;"&gt;lock&lt;/span&gt; (lockHelper)&lt;br /&gt;        {&lt;br /&gt;            cs = ics;&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;public void LoadDefaultCacheStrategy()&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;{&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;    lock (lockHelper)&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;    {&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;        cs = new DefaultCacheStrategy();&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;    }&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;}&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;}&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;调用代码&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;string key ="test"&lt;/p&gt;&lt;p&gt;CachingManager cm = new CachingManager();&lt;/p&gt;&lt;p&gt;cm.AddObject(key,new Object(),60);//缓存对象60秒。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;不足&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Memcached无法使用CacheDependency，需要自己去进行处理。如你的缓存对象依赖于文件，则在文件修改时要直接清空缓存。&lt;/p&gt;&lt;p&gt;Memcached也无法清空某一类的缓存对象，有时因为数据库做了修改，你要清空key以activity_开头的一系列对象的话，是做不到的。&lt;/p&gt;&lt;p&gt;变通的方案是先将key加入到List或Dictionary中，如下代码：&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;" onclick="cnblogs_code_show('119425ce-9e8c-4f21-80ba-7661d7d567c6')"&gt;&lt;div id="cnblogs_code_open_119425ce-9e8c-4f21-80ba-7661d7d567c6" class="cnblogs_code_hide"&gt;&lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt; ClearCacheByPattern(&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt; pattern)&lt;br /&gt; {&lt;br /&gt;     &lt;br /&gt;     &lt;span style="color: #0000ff;"&gt;if&lt;/span&gt;(client!=&lt;span style="color: #0000ff;"&gt;null&lt;/span&gt;)&lt;br /&gt;       &lt;span style="color: #0000ff;"&gt;return&lt;/span&gt;;&lt;br /&gt;   &lt;br /&gt;         &lt;span style="color: #0000ff;"&gt;object&lt;/span&gt; c = client.Get(&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;globel_cacheitems&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;);&lt;br /&gt;&lt;br /&gt;         &lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (c==&lt;span style="color: #0000ff;"&gt;null&lt;/span&gt;)&lt;br /&gt;           &lt;span style="color: #0000ff;"&gt;return&lt;/span&gt;;&lt;br /&gt;         &lt;br /&gt;         List&amp;lt;&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt;&amp;gt; cacheitems = (List&amp;lt;&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt;&amp;gt;) c;&lt;br /&gt;&lt;br /&gt;             &lt;span style="color: #0000ff;"&gt;foreach&lt;/span&gt; (&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt; cacheitem &lt;span style="color: #0000ff;"&gt;in&lt;/span&gt; cacheitems)&lt;br /&gt;&lt;br /&gt;             {&lt;br /&gt;&lt;br /&gt;                 &lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (cacheitem.StartsWith(pattern))&lt;br /&gt;&lt;br /&gt;                 {&lt;br /&gt;&lt;br /&gt;                     client.Remove(cacheitem);&lt;br /&gt;&lt;br /&gt;                 }&lt;br /&gt;&lt;br /&gt;             }&lt;br /&gt;  }&lt;/div&gt;&lt;/div&gt;&lt;p&gt;补充：感谢园友YLH对批量删除缓存的回复：&lt;/p&gt;&lt;p&gt;&lt;span style="color: #ff0000;"&gt;Memcached为了高性能而设计，功能少了很多。 如果内存不吃紧的话，批量删除缓存项，可以采用设置key分区，为分区加上版本号来解决。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #ff0000;"&gt;要批量删除一个分区的缓存，只需要升级一下缓存分区的版本号即可。目前我们在项目中就是采用这种方案。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;这个方案是目前批量删除缓存项的比较完美的方案了，多谢YLH!&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;span style="color: #000000;"&gt;如有什么问题，请在下面回复，大家一起讨论。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/drunkyong/aggbug/2270084.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/drunkyong/archive/2011/12/01/2270084.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/drunkyong/archive/2011/10/11/2206790.html</id><title type="text">非常怪异的服务器网络问题【续】，附排查问题思路</title><summary type="text">上次写了 “非常怪异的服务器网络问题，请有经验的朋友帮忙看下”这篇文章后，得到大家的帮助，让问题范围变少，非常感谢大家！问题的现象是：我使用Connection:keep-alive的连接不断的访问测试页面，测试页面没有问题。 通过在firefox上安装modify header插件将Connection修改为close然后连接不断的访问测试页面，测试页面过一段时间就会出现"unable to connect"的错误。 出现这个错误的时候页面很快就会返回，而不像503错误的时候要等待一段时间才返回。 测试页面一个是asp.net页面，一个是静态文...</summary><published>2011-10-11T01:02:00Z</published><updated>2011-10-11T01:02:00Z</updated><author><name>Ray Wu</name><uri>http://www.cnblogs.com/drunkyong/</uri></author><link rel="alternate" href="http://www.cnblogs.com/drunkyong/archive/2011/10/11/2206790.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/drunkyong/archive/2011/10/11/2206790.html"/><content type="html">&lt;p&gt;上次写了 &amp;ldquo;&lt;span style="text-decoration: underline;"&gt;&lt;a id="ctl03_TitleUrl" class="postTitle2" href="http://www.cnblogs.com/drunkyong/archive/2011/10/08/2201832.html" style="color: #000000; font-size: 12px; text-decoration: underline;" target="_blank"&gt;非常怪异的服务器网络问题，请有经验的朋友帮忙看下&lt;/a&gt;&lt;/span&gt;&amp;rdquo;这篇文章后，得到大家的帮助，让问题范围变少，非常感谢大家！&lt;/p&gt;&lt;p&gt;问题的现象是：我使用Connection:&lt;span style="color: #ff0000;"&gt;keep-alive&lt;/span&gt;的连接不断的访问测试页面，测试页面没有问题。&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 通过在firefox上安装modify header插件将Connection修改为&lt;span style="color: #ff0000;"&gt;close&lt;/span&gt;然后连接不断的访问测试页面，测试页面过一段时间就会出现"unable to connect"的错误。&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 出现这个错误的时候页面很快就会返回，而不像503错误的时候要等待一段时间才返回。&lt;/p&gt;&lt;p&gt;&amp;nbsp; &lt;strong&gt;测试页面一个是asp.net页面，一个是静态文件。两个会同时出现问题。&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #ff0000;"&gt;这个说明服务器在出现问题的时候无法创建新的连接来响应请求。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;为了进一步缩小问题的范围：&lt;br /&gt;我通过在服务器上访问127.0.0.1来测试，还是出现上面的问题，这个基本上可以&lt;span style="color: #ff0000;"&gt;排除是网络引起的问题&lt;/span&gt;了，因为127.0.0.1不需要经过网卡。&lt;br /&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;这样基本上可以确定是程序或者IIS的问题了。&lt;/p&gt;&lt;p&gt;为此我为网站添加了两个&amp;ldquo;主机头&amp;rdquo;，用了8080端口。我同时通过127.0.0.1和127.0.0.1:8080端口访问测试页面：&lt;/p&gt;&lt;p&gt;发现8080端口一直都没有出现问题，而80端口还是出现跟上面一样的问题。&lt;/p&gt;&lt;p&gt;&lt;span style="color: #ff0000;"&gt;这证明IIS无法在80端口创建更多的连接来响应请求&lt;/span&gt;。&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;我初步判断跟负载会有关系，为此我新建了一个&lt;strong&gt;计划任务&lt;/strong&gt;，在凌晨3：00钟的时候自动打开firefox浏览器，然后自动通过80和8080商品访问测试页面：&lt;/p&gt;&lt;p&gt;今天早上发现8080端口一直没有问题，而80端口在早上07：09：48的时候出现&amp;ldquo;Unable to connect&amp;rdquo;的情况。&lt;/p&gt;&lt;p&gt;以前一般在&lt;span style="color: #ff0000;"&gt;半小时&lt;/span&gt;以内就会出现问题，这个测试用了&lt;span style="color: #ff0000;"&gt;4个小时&lt;/span&gt;才出现问题。&lt;span style="color: #ff0000;"&gt;这说明这个问题跟负载确实有关。&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 16px;"&gt;&lt;strong&gt;请大家帮忙分析一下，在什么样的情况下会引起这种现象，感激不尽！我快被这个问题折磨疯了。&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;我之前碰到程序的问题大部分都是引起CPU过高，而不会出现无法建立连接的情况。&lt;/p&gt;&lt;p&gt;这次CPU什么的都很正常，事件查看器里面和iis log以及httperr里面一直没有任何相关信息，让人无从下手。&lt;/p&gt;&lt;p&gt;我们有一个网站之前有大量访问淘宝API，后来我禁用此功能后还是出现此问题。其他的对外链接就是访问新浪微博和腾讯微博，以及支付宝和快钱等网关了。&lt;/p&gt;&lt;img src="http://www.cnblogs.com/drunkyong/aggbug/2206790.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/drunkyong/archive/2011/10/11/2206790.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/drunkyong/archive/2011/10/08/2201832.html</id><title type="text">非常怪异的服务器网络问题，请有经验的朋友帮忙看下</title><summary type="text">最近一段时间我们服务器出现了比较奇怪的网络问题，偶尔会出现流量非常低的情况，如下图：出现此情况时，在客户端会出现部分无法访问（我跟同事同时测试：有时出现我不能访问的情况，有时他不能访问的情况）的问题。大概5-10秒钟后就马上恢复了。出现这种情况的时候CPU跟内存使用都非常正常，CPU不超过10%。中间我们有更换到一个新的网卡（服务器有两块相同的网卡，驱动是一样的），还是会出现此问题，接着我们又更换到新的IP（为了更换交换机）还是会出现此问题。为了测试问题所在，我们写了一个页面，可以按指定的时间如1秒，2秒等进行自动刷新，在客户端的浏览器和服务器的浏览器同时访问此页面，我们对此页面的每次访问都使</summary><published>2011-10-08T03:09:00Z</published><updated>2011-10-08T03:09:00Z</updated><author><name>Ray Wu</name><uri>http://www.cnblogs.com/drunkyong/</uri></author><link rel="alternate" href="http://www.cnblogs.com/drunkyong/archive/2011/10/08/2201832.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/drunkyong/archive/2011/10/08/2201832.html"/><content type="html">&lt;p&gt;最近一段时间我们服务器出现了比较奇怪的网络问题，&lt;strong&gt;偶尔会&lt;/strong&gt;出现流量非常低的情况，如下图：&lt;/p&gt;&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2011/15750/2011100810521330.jpg" alt="" /&gt;&lt;/p&gt;&lt;p&gt;出现此情况时，在客户端会出现部分无法访问（我跟同事同时测试：有时出现我不能访问的情况，有时他不能访问的情况）的问题。&lt;/p&gt;&lt;p&gt;大概&lt;strong&gt;5-10秒&lt;/strong&gt;钟后就马上恢复了。&lt;span style="color: #ff0000;"&gt;出现这种情况的时候CPU跟内存使用都非常正常，CPU不超过10%&lt;/span&gt;。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;中间我们有更换到一个新的网卡（服务器有两块相同的网卡，驱动是一样的），还是会出现此问题，接着我们又更换到新的IP（为了更换交换机）还是会出现此问题。&lt;/strong&gt;&lt;/p&gt;&lt;div style="margin-top: 20px;"&gt;&lt;/div&gt;&lt;p&gt;为了测试问题所在，我们写了一个页面，可以按指定的时间如1秒，2秒等进行自动刷新，在客户端的浏览器和服务器的浏览器同时访问此页面，&lt;/p&gt;&lt;p&gt;我们对此页面的每次访问都使用了&lt;strong&gt;GUID&lt;/strong&gt;来进行标识并保存到数据库。&lt;/p&gt;&lt;p&gt;我使用了三个浏览器进行测试：chrome和ie使用connection:KEEP-ALIVE连接，FIREFOX使用Connection:close的HTTP HEADER。&lt;/p&gt;&lt;p&gt;每次在流量低谷的时候,CHROME和IE没有问题，FIREFOX会出现无法访问的问题。&lt;/p&gt;&lt;p&gt;FIREFOX出现无法访问时，我们无法在IIS的日志中查到出现问题时的GUID，也无法在数据库中查询到。&lt;strong&gt;证明此请求没有转交到IIS。&lt;/strong&gt;&lt;/p&gt;&lt;div style="margin-top: 20px;"&gt;&lt;span style="color: #ff0000;"&gt;我已经关闭过COMODO和MSE，还是会出现问题。证明不是防火墙的问题&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top: 20px;"&gt;PING网关也是正常的。在本地PING服务器也是正常的。&lt;/div&gt;&lt;div style="margin-top: 20px;"&gt;我同时访问了三个网站：www.sojump.com,www.sojiang.com,blog.sojump.com,test.sojump.com 四个网站在同一个IIS下，使用的是不同的程序池。&lt;/div&gt;&lt;div style="margin-top: 20px;"&gt;blog.sojump.com用的是开源的blogengine.net，test.sojump.com下面只有一个测试用的&lt;strong&gt;静态页面&lt;/strong&gt;。&lt;/div&gt;&lt;div style="margin-top: 20px;"&gt;四个网站会在流量低谷的时候同时出现问题。&lt;span style="color: #ff0000;"&gt;证明跟程序和ASP.NET关系不大。&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top: 20px;"&gt;&lt;span style="color: #ff0000;"&gt;我们使用了微软的Network Monitor进行抓包，没有抓到访问出问题的时候那个URL，其他的包都有抓到。&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top: 20px;"&gt;&lt;/div&gt;&lt;p&gt;中间IDC机房有跟我们说：&lt;/p&gt;&lt;p&gt;以前一个客户也出现过类似的情况，他们使用的是100M独享带宽，在网络流量维持很高峰的时候，也会有几秒钟流量会突然降到5M以下，后来他们更新了网卡驱动程序就恢复了。&lt;/p&gt;&lt;p&gt;我们的情况有点不一样，我们流量在降到很低的时候，在之前网络流量并没有到很高峰。有时网络流量一直在最高峰的时候也没出现此情况。&lt;/p&gt;&lt;p&gt;我们的网卡是INTEL的，网卡驱动使用的是微软自带的驱动，，由于更新网卡驱动怕影响到整个网站的访问，所以我们不敢贸然更新网卡驱动，不知道有没有兄弟之前碰到过类似的问题？&lt;/p&gt;&lt;div style="margin-top: 20px;"&gt;&lt;/div&gt;&lt;p&gt;服务器配置：windows 2008 r2 standard &amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;IIS 7.5&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; sql server 2008 Enterprise&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;安装了COMODO防火墙和微软MSE杀毒软件&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; intel 至强E5620 2块 &amp;nbsp;24G内存&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;网络适配器&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;/span&gt;Intel(R) 82574L Gigabit Network Connection&lt;/p&gt;&lt;div style="margin-top: 20px;"&gt;&lt;/div&gt;&lt;p&gt;希望管理员能让此文章保留到首页，非常感谢！&lt;/p&gt;&lt;img src="http://www.cnblogs.com/drunkyong/aggbug/2201832.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/drunkyong/archive/2011/10/08/2201832.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/drunkyong/archive/2011/05/12/2044027.html</id><title type="text">测试</title><summary type="text"/><published>2011-05-12T01:28:00Z</published><updated>2011-05-12T01:28:00Z</updated><author><name>Ray Wu</name><uri>http://www.cnblogs.com/drunkyong/</uri></author><link rel="alternate" href="http://www.cnblogs.com/drunkyong/archive/2011/05/12/2044027.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/drunkyong/archive/2011/05/12/2044027.html"/><content type="html">&lt;p&gt;&lt;img src="http://image.sojump.com/Upload/UserUpload/drunkyong/e7f208de-6b83-4490-a672-0eda07f6045b.jpg" width="240" height="80" /&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/drunkyong/aggbug/2044027.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/drunkyong/archive/2011/05/12/2044027.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/drunkyong/archive/2010/11/17/1879530.html</id><title type="text">可以模仿，但不能无耻</title><summary type="text">当模仿已经成为国内互联网行业的潜规则，我们不禁要思考一个问题：抄袭究竟应不应该有人格底线？请看下面几组截图，左边是问卷星的页面，右边是抄袭者的页面 查看问卷星截图的原始网页查看态度8截图的原始网页 查看问卷星截图的原始网页查看态度8截图的原始网页作为在线问卷调查领域领先多年的网站，从功能到内容，问卷星一直被竞争对手模仿，但我们没有料到的是，居然会发生这种赤裸裸的全盘抄袭行为，而且对方自称是&amp;ldq...</summary><published>2010-11-17T01:31:00Z</published><updated>2010-11-17T01:31:00Z</updated><author><name>Ray Wu</name><uri>http://www.cnblogs.com/drunkyong/</uri></author><link rel="alternate" href="http://www.cnblogs.com/drunkyong/archive/2010/11/17/1879530.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/drunkyong/archive/2010/11/17/1879530.html"/><content type="html">&lt;div&gt;&lt;span style="color: #008080; font-size: 14pt;"&gt;&lt;strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;当模仿已经成为国内互联网行业的潜规则，我们不禁要思考一个问题：抄袭究竟应不应该有人格底线？&lt;/strong&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="color: #008080; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;请看下面几组截图，左边是问卷星的页面，右边是抄袭者的页面&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;a href="http://pic002.cnblogs.com/images/2010/15750/2010111709192017.png" target="_blank"&gt;&lt;img src="http://pic002.cnblogs.com/images/2010/15750/2010111709192017.png" alt="" width="300" height="180" /&gt;&lt;/a&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;a href="http://pic002.cnblogs.com/images/2010/15750/2010111709204378.png" target="_blank"&gt;&lt;img src="http://pic002.cnblogs.com/images/2010/15750/2010111709204378.png" alt="" width="300" height="180" /&gt;&lt;/a&gt; &lt;br /&gt;&lt;a href="http://www.sojump.com/" target="_blank"&gt;查看问卷星截图的原始网页&lt;/a&gt;&lt;span style="padding-left: 200px;"&gt;&lt;a href="http://taidu8.com/xitong/xitongfufei.jsp" target="_blank"&gt;查看态度8截图的原始网页&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://pic002.cnblogs.com/images/2010/15750/2010111709215978.png" target="_blank"&gt;&lt;img src="http://pic002.cnblogs.com/images/2010/15750/2010111709215978.png" alt="" width="300" height="180" /&gt;&lt;/a&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;a href="/upimg/userup/54481/544Q0F01010P00005200.png" target="_blank"&gt;&lt;img src="http://pic002.cnblogs.com/images/2010/15750/2010111709225140.png" alt="" width="300" height="180" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.sojump.com/register/corpprice.aspx" target="_blank"&gt;查看问卷星截图的原始网页&lt;/a&gt;&lt;span style="padding-left: 200px;"&gt;&lt;a href="http://taidu8.com/xitong/xitongfufei.jsp" target="_blank"&gt;查看态度8截图的原始网页&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="color: #008080; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;作为在线问卷调查领域领先多年的网站，从功能到内容，问卷星一直被竞争对手模仿，但&lt;/span&gt;&lt;span style="color: #008080; font-size: 10pt;"&gt;我们没有料到的是，居然会发生这种赤裸裸的全盘抄袭行为，而且对方自称是&amp;ldquo;中国第一家自助网络调查互动平台&amp;rdquo;，一个上过CCTV的权威调查公司。更&lt;/span&gt;&lt;span style="color: #008080; font-size: 10pt;"&gt;滑稽的是，在他们的页面上居然还保留有多处&amp;ldquo;问卷星&amp;rdquo;字样，是抄袭者的疏忽还是特意向原创者&amp;ldquo;致敬&amp;rdquo;？我们不得而知。&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="color: #008080; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;我们一直认为，正常的模仿、借鉴刺激着领先者必须时刻保持警惕，付出比跟随者更多的努力来确保领先地位，即使算不上绝对公平，但至少也在&lt;/span&gt;&lt;span style="color: #008080; font-size: 10pt;"&gt;客观上促进了整个领域的进步，&lt;/span&gt;&lt;span style="color: #008080; font-size: 10pt;"&gt;但没有人格底线的抄袭行为破坏了整个行业的生态环境，不仅侵犯了原创者的合法权益，对抄袭者而言也是对自身创新能力的自我阉割，而且还要承担巨大的法律责任和名誉损失上的风险，对于一个真正想要着眼未来的公司，这样急功近利的行为实在是百害而无一利。&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="color: #008080; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;由于在国内相关法律机制暂时不够完善，似乎可以肆无忌惮任意抄袭，但实际上没有哪个公司是可以靠单纯的抄袭这种流氓行为而成功的，因为抄袭者一旦陷入纯粹模仿的思维定势，必定会不思创新，进而逐步失去自身的核心优势，也失去自己的人格尊严，沦为跟风一族。我们期待中国互联网能走出抄袭的怪圈，多一些创新，多一些希望。&lt;/span&gt;&lt;/div&gt;&lt;div style="width: 100%; text-align: right; padding-right: 50px;"&gt;&lt;span style="color: #008080; font-size: 10pt;"&gt; 问卷星团队&lt;br /&gt; 2010-11-16&lt;/span&gt;&lt;/div&gt;&lt;img src="http://www.cnblogs.com/drunkyong/aggbug/1879530.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/drunkyong/archive/2010/11/17/1879530.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/drunkyong/archive/2010/11/05/1870285.html</id><title type="text">也谈谈人人网的不正当竞争</title><summary type="text">前言很早以前就想写这篇文章的，考虑到写了也没多大作用，就一直没有动笔。看了最近360与QQ的争斗，感觉中国互联网环境确实不怎么样，还是写出来，多少能荡起点水花，也算做个备忘。正文 我们自己现在创业做一个问卷调查的网站：问卷星。虽然没有什么名气，靠着自己的努力实现了收支平衡，能够在中国的互联网环境中不靠广告收入存活下去，也算是一件不容易的事情。 当时看着大家都在做开放平台，做分享，就在自己的网站提供...</summary><published>2010-11-05T14:06:00Z</published><updated>2010-11-05T14:06:00Z</updated><author><name>Ray Wu</name><uri>http://www.cnblogs.com/drunkyong/</uri></author><link rel="alternate" href="http://www.cnblogs.com/drunkyong/archive/2010/11/05/1870285.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/drunkyong/archive/2010/11/05/1870285.html"/><content type="html">&lt;p&gt;&lt;strong&gt;前言&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;很早以前就想写这篇文章的，考虑到写了也没多大作用，就一直没有动笔。看了最近360与QQ的争斗，&lt;/p&gt;&lt;p&gt;&amp;nbsp;感觉中国互联网环境确实不怎么样，还是写出来，多少能荡起点水花，也算做个备忘。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;正文&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp; 我们自己现在创业做一个问卷调查的网站：&lt;a href="http://www.sojump.com" target="_blank"&gt;问卷星&lt;/a&gt;&amp;nbsp;。虽然没有什么名气，靠着自己的努力实现了收支平衡，能够在中国的互联网环境中&lt;strong&gt;不靠广告收入&lt;/strong&gt;存活下去，也算&lt;/p&gt;&lt;p&gt;是一件不容易的事情。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp; 当时看着大家都在做开放平台，做分享，就在自己的网站提供了&amp;ldquo;开心网&amp;rdquo;，&amp;ldquo;新浪微博&amp;ldquo;，&amp;rdquo;&amp;ldquo;人人网&amp;rdquo;（已移除）等网站的分享功能。&lt;span style="color: #ff6600;"&gt;截图如下：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&lt;a href="http://www.sojump.com/jq/491744.aspx" target="_blank"&gt;&lt;img src="http://pic002.cnblogs.com/images/2010/15750/2010110521203781.png" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp; 加入分享时，才发现我们网站已经被人人网给屏蔽掉了。点击任何一个页面的分享都会出现下面的情况，&lt;span style="color: #ff6600;"&gt;截图如下：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&lt;img src="http://pic002.cnblogs.com/images/2010/15750/2010110522032796.jpg" alt="" /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp; 也是&lt;strong&gt;&amp;ldquo;可能含有&amp;rdquo;这种莫须有的借口&lt;/strong&gt;把我们的网站给屏蔽掉了。我们是一个非常正规的问卷调查工具类网站，&lt;strong&gt;到目前为止填写问卷的用户超过了1300万&lt;/strong&gt;。&lt;/p&gt;&lt;p&gt;其他网站的分享功能都是能正常使用的，这还不算，&lt;span style="color: #ff0000;"&gt;我们网站的用户也不断发邮件来反馈说不能在人人网上跟自己的好友分享自己的问卷，不知道什么原因。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #ff0000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;与人人网的交涉过程&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;为此我们专门联系了人人网的客服（电话打不通，只能通过留言），刚开始还有回应，最后不知道什么原因，再问他们就&lt;strong&gt;完全没有回音&lt;/strong&gt;了。&lt;span style="color: #ff6600;"&gt;截图如下：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #ff6600;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2010/15750/2010110521285428.jpg" alt="" /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 10pt;"&gt;&lt;strong&gt;人人网客服在根本就没有了解情况也没有进行任何尝试的情况下，就用一个&amp;ldquo;可能&amp;rdquo;回复了我们。&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 10pt;"&gt;&lt;strong&gt;我们的首页完全是我们自己的，竟然也不能在&lt;/strong&gt;&lt;/span&gt;&lt;span style="line-height: 19px; font-size: 13px;"&gt;&lt;strong&gt;人人网上&lt;span style="color: #ff0000;"&gt;与自己的好友分享&lt;/span&gt;，&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="line-height: 19px; font-size: 13px;"&gt;&lt;strong&gt;不知道这个需要谁授权？难道是要人人网授权我们问卷星网站？&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 10pt;"&gt;&lt;strong&gt;后来再给他们的客服发了一个留言，就没有任何消息了&lt;/strong&gt;&lt;/span&gt;。&lt;span style="color: #ff6600;"&gt;截图如下：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #ff6600;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2010/15750/2010110521322410.jpg" alt="" /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;总结：&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;后来才发现原来是人人网自己也开发了一个调查模块。因为自己开发了这个调查模块，&lt;strong&gt;而把竞争对手的东西完全屏蔽掉&lt;/strong&gt;，并给了一个完全荒谬的借口，&lt;/p&gt;&lt;p&gt;这就是这种大网站的竞争手段。要是不了解我们的用户，还真以为我们网站有什么不和谐的东西呢。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;对此我们也无法可想，只能自己把产品做得更好！&lt;/strong&gt;同时期待这种没有行业道德的网站能早日被他的竞争对手取代。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;PS：什么样的公司做什么样的事情，从真假开心网就可以看出人人网的本质。&lt;/p&gt;&lt;img src="http://www.cnblogs.com/drunkyong/aggbug/1870285.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/drunkyong/archive/2010/11/05/1870285.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/drunkyong/archive/2010/10/29/1864624.html</id><title type="text">腾讯被打残吧，360去死吧</title><summary type="text">前言：本来是想写一遍文章来说说我对腾讯跟360的看法的，看了评论：狗日的腾讯 狗日的360把我想说的都说出来了，以为我不用再写文章了。不过看了这篇360，你若称帝，谁能治你的恶心文章后，我还是整理成一篇文章发出来吧。话说当今互联网的巨头，谁都或多或少有一些原罪，只要没有违反法律，大家也都只能看看，说不定自己也能学习学习这些企业的行为从中获得一些启发。论述：腾讯有模仿的原罪，所以在3...</summary><published>2010-10-29T09:23:00Z</published><updated>2010-10-29T09:23:00Z</updated><author><name>Ray Wu</name><uri>http://www.cnblogs.com/drunkyong/</uri></author><link rel="alternate" href="http://www.cnblogs.com/drunkyong/archive/2010/10/29/1864624.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/drunkyong/archive/2010/10/29/1864624.html"/><content type="html">&lt;p&gt;&lt;strong&gt;&lt;span style="font-size: 14pt;"&gt;前言：&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;本来是想写一遍文章来说说我对腾讯跟360的看法的，看了&lt;/p&gt;&lt;address id="news_title"&gt;&lt;strong&gt;&lt;span style="color: #ff9900;"&gt;&lt;a href="http://news.cnblogs.com/n/79034/"&gt;评论：狗日的腾讯 狗日的360&lt;/a&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/address&gt;&lt;p&gt;把我想说的都说出来了，以为我不用再写文章了。不过看了这篇&lt;/p&gt;&lt;address class="postTitle"&gt;&lt;strong&gt;&lt;span style="color: #ffcc00;"&gt;&lt;a id="ctl04_TitleUrl" class="postTitle2" href="http://www.cnblogs.com/hack/archive/2010/10/29/1864405.html"&gt;360，你若称帝，谁能治你&lt;/a&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/address&gt;&lt;p&gt;的恶心文章后，我还是整理成一篇文章发出来吧。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;话说当今互联网的&lt;strong&gt;巨头&lt;/strong&gt;，谁都或多或少有一些&lt;strong&gt;原罪&lt;/strong&gt;，只要没有违反法律，大家也都只能看看，说不定自己也能学习学习这些企业的行为从中获得一些启发。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 14pt;"&gt;&lt;strong&gt;论述：&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;腾讯有模仿的原罪，所以在360发布隐私保护器时，其他门户像163，SOHU,SINA，游戏厂商盛大都是暗中支持360的，这点从他们的新闻就可以看出来，腾讯的模仿让大家恨之又恨，但是又奈之不何。腾讯让其他门户的广告收入，SP收入，用户群等受到冲击，像163跟盛大的游戏受到的冲击就更大了，这是腾讯得罪大老们的地方，因为模仿得罪小网站，小公司的地方可能就更多了。　&lt;br /&gt;&lt;br /&gt;３６０的原罪就更严重了，前身是3721的360,在抹黑对手，卸载对手软件，恶意雇用枪手诽谤对手方面简直玩得炉火纯青了。谁要当360的对手，我就抹黑你，卸载你，看你还敢不敢进入我的地盘。就拿这件事来说，从博客园的评论中就有不少360的枪手。&lt;/p&gt;&lt;p&gt;当然360的产品本身是做得很出色的，用户体验方面也确实值得称道，至少使用360以后很少中毒是事实（恶意的揣测360自己研发的攻击病毒只会针对没有安装360的电脑）。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;都说以用户为中心，腾讯在模仿上面也确实在不少地方做到了超越对手的地方，凭借本身强大至无敌的客户端，让对手的先发优势完全丧失，这也是为什么大家这么痛恨腾讯的地方，因为根本不能在同一起跑线上跟腾讯竞争。腾讯的QQ医生也是如此，这让360开始感到害怕了。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;其实也不能怪360没有自信在产品上战胜QQ医生,实在是QQ太强大了，而且QQ静默安装QQ医生的行为，简直是在挖周老板的坟墓。周老板已经感觉自己没办法从用户体验上取胜，以后接之而来的流氓行为就太自然了。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;对于腾讯的这些行为，确实也是要360给他点教训，被一条疯狗咬一口才知道痛，谁让中国还没有反垄断法，可以让腾讯比微软的行为更恶劣，更加肆无忌惮。&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 14pt;"&gt;&lt;strong&gt;结论：&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;总之两个都不是好东西，在我看来腾讯还算是相对合法的行为，虽然不正当，但还是&lt;strong&gt;守规矩&lt;/strong&gt;的，360的行为则完全就是流氓了，感觉很快又要回到3721的时代了。&lt;br /&gt;&lt;br /&gt;在这里我想说的是让暴风雨来得更猛烈些吧，360把腾讯搞残，让腾讯以后的模仿行为收敛些。腾讯把360搞死，让互联网少一个流氓，说不定以后的网络时代也会更加安全。&lt;/p&gt;&lt;p&gt;&lt;br /&gt;这样这场斗争才能让我等小民受益！&lt;/p&gt;&lt;img src="http://www.cnblogs.com/drunkyong/aggbug/1864624.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/drunkyong/archive/2010/10/29/1864624.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/drunkyong/archive/2010/07/23/1783587.html</id><title type="text">测试</title><summary type="text"/><published>2010-07-23T03:24:00Z</published><updated>2010-07-23T03:24:00Z</updated><author><name>Ray Wu</name><uri>http://www.cnblogs.com/drunkyong/</uri></author><link rel="alternate" href="http://www.cnblogs.com/drunkyong/archive/2010/07/23/1783587.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/drunkyong/archive/2010/07/23/1783587.html"/><content type="html">&lt;p&gt;&lt;iframe src="http://www.sojump.com/jq/358888,i,t.aspx?width=700&amp;amp;source=iframe" style="overflow: auto;" width="700" frameborder="0" height="330"&gt;&lt;/iframe&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/drunkyong/aggbug/1783587.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/drunkyong/archive/2010/07/23/1783587.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry></feed>
