Memcached (第一篇)

 Memcached是「分佈式」的內存對象緩存系統,那麼不須要「分佈」的、不須要共享的或者乾脆規模小到只有一臺服務器的應用,Memcached不會帶來任何好處,相反還會拖慢系統效率,由於網絡鏈接一樣須要資源,若是隻是本地級緩存,使用Memcached是很是不划算的。前端

  Memcached在不少時候都是做爲數據庫前端Cache使用的。由於它比數據庫少了不少SQL解析、磁盤操做等開銷,並且它是使用內存來管理數據的,因此它能夠提供比直接讀取數據庫更好的性能。在大型系統中,訪問一樣的數據是很頻繁的,Memcached能夠大大下降數據庫壓力,使系統執行效率提高。另外,Memcached也常常做爲服務器之間數據共享的存儲媒介。數據庫

  Memcached使用內存管理數據,因此它是易失的,當服務器重啓或者Memcached進程終止,數據便會丟失,因此Memcached不能用來持久保存數據。不少人錯誤地理解,認爲Memcached的性能很是好,好到了內存和硬盤的對比程度,其實Memcached使用的內存並不會獲得成百上千的讀寫速度提升,它的實際瓶頸在於網絡鏈接。它和使用磁盤的數據庫系統相比,好處在於它自己很是「輕」,由於沒有過多的開銷和直接的讀寫方式,它能夠輕鬆應付很是大的數據交換量,因此常常會出現兩條千兆帶寬都滿負荷了,Memcached進程自己並不佔用多少CPU資源的狀況。編程

  從使用的角度來講,Memcached針對Asp.net的API就像和內置的API同樣。開發人員很容易使用Memcached,僅僅經過在代碼中查找和替換便可實現。windows

1、Memcached安裝

  一、下載windows版memcached緩存

  二、打開DOS,進入memcached.exe所在目錄服務器

  • 進入某個硬盤的命令 X:+回車 (X表明硬盤的盤符)
  • 進入某個文件夾的命令 cd+空格+文件名子
  • 退出當前文件夾的命令 cd..(就是cd後面加上兩個點號再回車便可)

  三、輸入命令:memcached.exe -d install網絡

  memcached -d install -l 127.0.0.1 -m 1024 -c 2048併發

  參數說明app

  • -d install 安裝爲Windows服務,默認端口11211
  • -l 綁定的IP
  • -m 可以使用的最多內存(MB),默認64MB。
  • -c 最發併發鏈接數,默認1024。

  四、 守護進程方式啓動:memcached.exe -m 32 -d startsocket

  五、 指定端口啓動:memcached.exe –p 33000 -m 32

  能夠啓動多個服務,命令行窗口關閉則服務中止。

2、啓動服務,安裝完成

  測試Memcached的步驟以下:

  1).使用telnet指定訪問localhost的11211端口,11211爲Memcached的默認監聽剪口。

  telnet localhost 11211

  2).輸入stats,回車執行,檢查Memcached服務的狀態。

  

  3).quit命令退出。

3、在Asp.net中訪問Memcached

  在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>
複製代碼

 

4、操做Memcached

  對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。沒法成功,看來仍是要了解一下套接字編程,本身搞了。

相關文章
相關標籤/搜索