Memcached分布式緩存初體驗

jopen 9年前發布 | 11K 次閱讀 緩存服務器 memcached

1 Memcached簡介/下載/安裝

Memcached是一個高性能的不是內存對象緩存系統,用于動態Web應用以減輕數據庫負載.Memcached基于一個存儲鍵/值對的HashMap.其客戶端可以使用任何語言進行編寫,并通過Memcached協議與進行通信

</blockquote>

  1. 下載memcached-win64-1.4.4-14 的windows穩定版
  2. cmd命令(win+R),切換到解壓包的指定目錄,并且輸入命令:memcached.exe -d install(與之對應memcached.exe -d uninstall)
  3. 啟動Memcached,其命令:memcached.exe -d start(與之對應關閉:memcached.exe -d stop)
  4. 至此已經安裝并且啟動了Memcached服務端(命令幫助可以鍵入:memcached.exe help)
  5. </ol>

    Memcached默認的端口是11211

    2 新建測試項目,并且使用Memcached客戶端實現緩存

    • 新建一個Mvc項目:MemcachedTest,并且Nuget包引入EnyimMemcached(開源,直通門:https://github.com/enyim/EnyimMemcached)
    • 在Web.config中進行配置
    • </ul>

      <sectionGroup name="enyim.com">
                  <section name="log" type="Enyim.Caching.Configuration.LoggerSection, Enyim.Caching" />
                  <section name="memcached" type="Enyim.Caching.Configuration.MemcachedClientSection, Enyim.Caching" />
              </sectionGroup>
      <enyim.com>
      <log factory="Enyim.Caching.Log4NetFactory, Enyim.Caching.Log4NetAdapter" />
      <memcached>
      <servers>
      <add address="192.168.14.172" port="11211" />
      <add address="192.168.14.251" port="11211" />
      </servers>
      </memcached>
      </enyim.com>

      緩存測試代碼:(備注: 針對類的實體的緩存,必須在該類上加上[Serializable]特性)
      Student luge = new Student() { UserId = 1, UserName = "luge" };

              var lugeByCache = client.Get<Student>("luge");
      
              if (lugeByCache == null)
              {
                  client.Store(StoreMode.Add, "luge", luge);
              }
      
      
              Student pigeon = new Student() { UserId = 2, UserName = "pigeon" };
              var pigeonByCache = client.Get<Student>("pigeon");
      
              if (pigeonByCache == null)
              {
                  client.Store(StoreMode.Add, "pigeon", pigeon);
              }</pre><br />
      

      • 結果
      • </ul>

        分別可以通過telnet 192.168.14.17 11211(默認端口) /telnet 192.168.14.251 11211 鍵入stats可以查看當前Memcached的版本以及配置信息

         對于telnet 未啟用的,可以在控制面板--> 程序與功能-->打開與關閉Window功能-->勾取telnet 客戶端

        </blockquote>

         分別監聽兩個服務器中緩存的值,分別鍵入:get luge; get pigeon;會顯示出各自緩存的值

         Memcached分布式緩存初體驗  Memcached分布式緩存初體驗

        這樣一個分布式緩存的例子已經完成.

        3 同步Session信息

        筆者使用MemcachedProviders(是對EnyimMemcached進行封裝,提供客戶端執行的Asp.net 站點中的Session同步),其原理是使用EnyimMemcached進行重寫了SessionStateStoreProviderBase,使用 是只需要在System.Web標簽下使用自定義的Session配置項,即可完成替換原有的Session內容

        <sessionState cookieless="false" regenerateExpiredSessionId="true" mode="Custom" timeout="1"
         customProvider="MemcachedSessionProvider">
                    <providers>
                        <add name="MemcachedSessionProvider"  type="MemcachedProviders.Session.SessionStateProvider,MemcachedProviders"  connectionStringName="ApplicationServices" dbType="none" writeExceptionsToEventLog="false"   />
                    </providers>
                </sessionState>

        之后使用,跟Asp.Net使用Session一樣:Session["UserName"]=luge;測試結果如下:

         Memcached分布式緩存初體驗

         4  參考

        http://www.cnblogs.com/luminji/archive/2011/08/17/2143371.html

        http://www.cnblogs.com/edisonchou/p/3855517.html

        </blockquote> 來自:http://www.cnblogs.com/luge/p/Memcached_For_Net.html

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!