Dict.CN 在線詞典, 英語學習, 在線翻譯

          都市淘沙者

          荔枝FM Everyone can be host

          統計

          留言簿(23)

          積分與排名

          優秀學習網站

          友情連接

          閱讀排行榜

          評論排行榜

          分布式緩存系統Memcached簡介與實踐(轉)

           

          緣起: 在數據驅動的web開發中,經常要重復從數據庫中取出相同的數據,這種重復極大的增加了數據庫負載。緩存是解決這個問題的好辦法。但是ASP.NET中的雖然已經可以實現對頁面局部進行緩存,但還是不夠靈活。此時Memcached或許是你想要的。

          Memcached是什么?
          Memcached是由Danga Interactive開發的,高性能的,分布式的內存對象緩存系統,用于在動態應用中減少數據庫負載,提升訪問速度。

          Memcached能緩存什么?
          通過在內存里維護一個統一的巨大的hash表,Memcached能夠用來存儲各種格式的數據,包括圖像、視頻、文件以及數據庫檢索的結果等。

          Memcached快么?

          非常快。Memcached使用了libevent(如果可以的話,在linux下使用epoll)來均衡任何數量的打開鏈接,使用非阻塞的網絡I/O,對內部對象實現引用計數(因此,針對多樣的客戶端,對象可以處在多樣的狀態), 使用自己的頁塊分配器和哈希表, 因此虛擬內存不會產生碎片并且虛擬內存分配的時間復雜度可以保證為O(1).。

          Danga Interactive為提升Danga Interactive的速度研發了Memcached。目前,LiveJournal.com每天已經在向一百萬用戶提供多達兩千萬次的頁面訪問。而這些,是由一個由web服務器和數據庫服務器組成的集群完成的。Memcached幾乎完全放棄了任何數據都從數據庫讀取的方式,同時,它還縮短了用戶查看頁面的速度、更好的資源分配方式,以及Memcache失效時對數據庫的訪問速度。

          Memcached的特點
          Memcached的緩存是一種分布式的,可以讓不同主機上的多個用戶同時訪問, 因此解決了共享內存只能單機應用的局限,更不會出現使用數據庫做類似事情的時候,磁盤開銷和阻塞的發生。

          Memcached的使用
          Memcached服務器端的安裝 (此處將其作為系統服務安裝)
            下載文件:memcached 1.2.1 for Win32 binaries (Dec 23, 2006)
             1 解壓縮文件到c:\memcached
             2 命令行輸入 'c:\memcached\memcached.exe -d install' 
             3 命令行輸入 'c:\memcached\memcached.exe -d start' ,該命令啟動 Memcached ,默認監聽端口為 11211
            通過 memcached.exe -h 可以查看其幫助
          二   .NET memcached client library
             下載文件:https://sourceforge.net/projects/memcacheddotnet/

             里面有.net1.1  和 .net2.0的兩種版本  還有一個不錯的例子。

          三  應用

            1 將Commons.dll,ICSharpCode.SharpZipLib.dll,log4net.dll,Memcached.ClientLibrary.dll 等放到bin目錄
            2 引用
          Memcached.ClientLibrary.dll
            3 代碼

           1 namespace Memcached.MemcachedBench
           2 {
           3     using System;
           4     using System.Collections;
           5 
           6     using Memcached.ClientLibrary;
           7 
           8     public class MemcachedBench 
           9     {
          10         [STAThread]
          11         public static void Main(String[] args) 
          12         {
          13             string[] serverlist = { "10.0.0.131:11211""10.0.0.132:11211" };
          14 
          15             //初始化池
          16             SockIOPool pool = SockIOPool.GetInstance();
          17             pool.SetServers(serverlist);
          18 
          19             pool.InitConnections = 3;
          20             pool.MinConnections = 3;
          21             pool.MaxConnections = 5;
          22 
          23             pool.SocketConnectTimeout = 1000;
          24             pool.SocketTimeout = 3000;
          25 
          26             pool.MaintenanceSleep = 30;
          27             pool.Failover = true;
          28 
          29             pool.Nagle = false;
          30             pool.Initialize();
          31 
          32             // 獲得客戶端實例
          33             MemcachedClient mc = new MemcachedClient();
          34             mc.EnableCompression = false;
          35 
          36             Console.WriteLine("------------測  試-----------");
          37             mc.Set("test""my value");  //存儲數據到緩存服務器,這里將字符串"my value"緩存,key 是"test"
          38 
          39             if (mc.KeyExists("test"))   //測試緩存存在key為test的項目
          40             {
          41                 Console.WriteLine("test is Exists");
          42                 Console.WriteLine(mc.Get("test").ToString());  //在緩存中獲取key為test的項目
          43             }
          44             else
          45             {
          46                 Console.WriteLine("test not Exists");
          47             }
          48 
          49             Console.ReadLine();
          50 
          51             mc.Delete("test");  //移除緩存中key為test的項目
          52 
          53             if (mc.KeyExists("test"))
          54             {
          55                 Console.WriteLine("test is Exists");
          56                 Console.WriteLine(mc.Get("test").ToString());
          57             }
          58             else
          59             {
          60                 Console.WriteLine("test not Exists");
          61             }
          62             Console.ReadLine();
          63             
          64             SockIOPool.GetInstance().Shutdown();  //關閉池, 關閉sockets
          65         }
          66     }
          67 }
            4 運行結果

           

             

          posted on 2008-04-09 12:36 都市淘沙者 閱讀(116) 評論(0)  編輯  收藏


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 扶风县| 搜索| 依安县| 曲松县| 英德市| 广饶县| 姚安县| 沛县| 昌邑市| 大冶市| 鹤山市| 景泰县| 内丘县| 大厂| 汉阴县| 涟源市| 商水县| 台州市| 望奎县| 石景山区| 武乡县| 皮山县| 揭东县| SHOW| 灵川县| 新绛县| 平阴县| 宁强县| 宁河县| 抚州市| 全州县| 大荔县| 霍州市| 鸡西市| 金溪县| 周宁县| 金寨县| 凌源市| 太仆寺旗| 昌图县| 克拉玛依市|