Memcached分布式緩存初體驗


1 Memcached簡介/下載/安裝

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

  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)

Memcached默認的端口是11211

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

  • 新建一個Mvc項目:MemcachedTest,並且Nuget包引入EnyimMemcached(開源,直通門:https://github.com/enyim/EnyimMemcached)
  • 在Web.config中進行配置
<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>
View Code
  • 緩存測試代碼:(備注:針對類的實體的緩存,必須在該類上加上[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);
            }
View Code
  • 結果

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

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

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

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

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>
View Code

 

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

 4  參考

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

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM