Memcached是「分佈式」的內存對象緩存系統,那麼不須要「分佈」的、不須要共享的或者乾脆規模小到只有一臺服務器的應用,Memcached不會帶來任何好處,相反還會拖慢系統效率,由於網絡鏈接一樣須要資源,若是隻是本地級緩存,使用Memcached是很是不划算的。前端
Memcached在不少時候都是做爲數據庫前端Cache使用的。由於它比數據庫少了不少SQL解析、磁盤操做等開銷,並且它是使用內存來管理數據的,因此它能夠提供比直接讀取數據庫更好的性能。在大型系統中,訪問一樣的數據是很頻繁的,Memcached能夠大大下降數據庫壓力,使系統執行效率提高。另外,Memcached也常常做爲服務器之間數據共享的存儲媒介。數據庫
Memcached使用內存管理數據,因此它是易失的,當服務器重啓或者Memcached進程終止,數據便會丟失,因此Memcached不能用來持久保存數據。不少人錯誤地理解,認爲Memcached的性能很是好,好到了內存和硬盤的對比程度,其實Memcached使用的內存並不會獲得成百上千的讀寫速度提升,它的實際瓶頸在於網絡鏈接。它和使用磁盤的數據庫系統相比,好處在於它自己很是「輕」,由於沒有過多的開銷和直接的讀寫方式,它能夠輕鬆應付很是大的數據交換量,因此常常會出現兩條千兆帶寬都滿負荷了,Memcached進程自己並不佔用多少CPU資源的狀況。編程
從使用的角度來講,Memcached針對Asp.net的API就像和內置的API同樣。開發人員很容易使用Memcached,僅僅經過在代碼中查找和替換便可實現。windows
一、下載windows版memcached緩存
二、打開DOS,進入memcached.exe所在目錄服務器
三、輸入命令:memcached.exe -d install網絡
memcached -d install -l 127.0.0.1 -m 1024 -c 2048併發
參數說明app
四、 守護進程方式啓動:memcached.exe -m 32 -d startsocket
五、 指定端口啓動:memcached.exe –p 33000 -m 32
能夠啓動多個服務,命令行窗口關閉則服務中止。
測試Memcached的步驟以下:
1).使用telnet指定訪問localhost的11211端口,11211爲Memcached的默認監聽剪口。
telnet localhost 11211
2).輸入stats,回車執行,檢查Memcached服務的狀態。
3).quit命令退出。
在Asp.net中訪問Memcached的步驟以下:
一、到Codeplex中下載Memcached Provider:http://memcachedproviders.codeplex.com/
二、在網站項目中引用Enyim.Caching.dll,MemcachedProviders.dll以及Log4net.dll。
三、在配置文件中「註冊自定義緩存提供器」,代碼以下:
<section name="cacheProvider" type="MemcachedProviders.Cache.CacheProviderSection,MemcachedProviders" allowDefinition="MachineToApplication" restartOnExternalChanges="true" /> <sectionGroup name="enyim.com"> <section name="memcached" type="Enyim.Caching.Configuration.MemcachedClientSection,Enyim.Caching" /> </sectionGroup> <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net" />
四、分別配置三個Section.
首先是enyim.com的配置信息:
<enyim.com> <memcached> <servers> <!-- 本身的服務器IP放這裏 --> <add address="127.0.0.1" port="11211" /> </servers> <socketPool minPoolSize="10" maxPoolSize="100" connectionTimeout="00:00:10" deadTimeout="00:02:00" /> </memcached> </enyim.com>
而後是cacheProvider的配置信息:
<cacheProvider defaultProvider="MemcachedCacheProvider"> <providers> <add name="MemcachedCacheProvider" type="MemcachedProviders.Cache.MemcachedCacheProvider,MemcachedProviders" keySuffix="_MySuffix_" defaultExpireTime="2000" /> </providers> </cacheProvider>
最後是Log4Net的配置信息:
<log4net> <!-- 定義一些追加輸出程序 --> <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender"> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" /> </layout> </appender> <!-- <threshold value="OFF"> --> <!-- 根據根目錄信息,添加輸出程序與設置默認優先級 --> <root> <priority value="WARN"/> <appender-ref ref="ConsoleAppender"> <filter type="log4net.Filter.LevelRangeFilter"> <levelMin value="WARN"/> <levelMax value="FATAL"/> </filter> </appender-ref> </root> </log4net>
對Memcached的基本操做步驟以下:
1.引用MemcachedProviders的命名空間
using MemcachedProviders.Cache;
2.在Memcached中保存信息
DistCache.Add(stringKey,objValue);
3.從Memcached中讀取信息。
DistCache.Get(strKey);
4.刪除信息
DistCache.Remove(cacheKey);
5.清除全部信息
DistCache.RemoveAll();
不知道是否是Memcached版本的問題,致使Add。沒法成功,看來仍是要了解一下套接字編程,本身搞了。