不急不徐,持之以恒。

          http://blog.gopersist.com/

            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
            24 隨筆 :: 0 文章 :: 52 評論 :: 0 Trackbacks
          <2015年6月>
          31123456
          78910111213
          14151617181920
          21222324252627
          2829301234
          567891011

          常用鏈接

          留言簿(2)

          隨筆分類

          隨筆檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          互聯(lián)網(wǎng)上的應(yīng)用、網(wǎng)站,隨著用戶的增長,功能的增強(qiáng),會導(dǎo)致服務(wù)器超載,響應(yīng)變慢等問題。緩存技術(shù)是減輕服務(wù)器壓力、加快服務(wù)響應(yīng)時間、提升用戶體驗的有效途徑。Memcached是非常流行的緩存系統(tǒng),這里介紹對Memcached的安裝、設(shè)定,以及在集群環(huán)境下的使用。

          Memcached簡介

          Memcached是一個開源、高性能、分布式的內(nèi)存緩存系統(tǒng),用于加速動態(tài)網(wǎng)站的訪問,減輕數(shù)據(jù)庫負(fù)載。

          Memcached使用了Slab Allocator的機(jī)制分配、管理內(nèi)存,解決了內(nèi)存碎片的問題。

          Memcached雖然可以在多線程模式下運(yùn)行,但線程數(shù)通常只需設(shè)定為與CPU數(shù)量相同,這一點與Nginx的設(shè)定類似。

          Memcached使用

          安裝:

          在CentOS下使用下面的命令安裝:

          sudo yum install memcached 

          啟動:

          memcached -m 100 -p 11211 -d -t 2 -c 1024 -P /tmp/memcached.pid 

          -m 指定使用的內(nèi)存容量,單位MB,默認(rèn)64MB。

          -p 指定監(jiān)聽的TCP端口,默認(rèn)11211。

          -d 以守護(hù)進(jìn)程模式啟動。

          -t 指定線程數(shù),默認(rèn)為4。

          -c 最大客戶端連接數(shù),默認(rèn)為1024。

          -P 保存PID文件。

          關(guān)閉:

          kill `cat /tmp/memcached.pid` 

          測試:

          使用telnet連接memcached服務(wù)。

          telnet localhost 11211 

          存儲命令格式:

          set foo 0 0 4 abcd STORED  <command name> <key> <flags> <exptime> <bytes> <data block>  <command name> set, add, replace等 <key> 關(guān)鍵字 <flags> 整形參數(shù),存儲客戶端對鍵值的額外信息,如值是壓縮的,是字符串,或JSON等 <exptime> 數(shù)據(jù)的存活時間,單位為秒,0表示永遠(yuǎn) <bytes> 存儲值的字節(jié)數(shù) <data block> 存儲的數(shù)據(jù)內(nèi)容 

          讀取命令格式:

          get foo VALUE foo 0 4 abcd END  <command name> <key>  <command name> get, gets。gets比get多返回一個數(shù)字,這個數(shù)字檢查數(shù)據(jù)有沒有發(fā)生變化,當(dāng)key對應(yīng)的數(shù)據(jù)改變時,gets多返回的數(shù)字也會改變。 <key> 關(guān)鍵字  返回的數(shù)據(jù)格式:  VALUE <key> <flags> <bytes> 

          CAS(checked and set):

          cas foo 0 0 4 1 cdef STORED  cas <key> <flags> <exptime> <bytes> <version>  除最后的<version>外,其他參數(shù)與set, add等命令相同,<version>的值需要與gets獲取的值相同,否則無法更新。 incr, decr可對數(shù)字型數(shù)據(jù)進(jìn)行原子增減操作。 

          全局統(tǒng)計信息

          stats STAT pid 10218 STAT time 1432611519 STAT curr_connections 6 STAT total_connections 9 STAT connection_structures 7 STAT reserved_fds 10 STAT cmd_get 5 STAT cmd_set 1 STAT cmd_flush 0 STAT cmd_touch 0 STAT get_hits 3 STAT get_misses 2 STAT delete_misses 0 STAT delete_hits 0 ... END 

          Memcached集群

          Memcached本身不做任何容錯處理,對故障節(jié)點的處理方式完全取決于客戶端。對Memcached的客戶端來說,不能使用普通的哈希算法(哈希取模)來尋找目標(biāo)Server,因為這樣在有緩存節(jié)點失效時,會導(dǎo)致大面積緩存數(shù)據(jù)不可用。如下圖:

          當(dāng)Server3失效后,客戶端需要根據(jù)可用Server數(shù)量重新計算緩存的目標(biāo)Server,這時,Key的哈希值為10的數(shù)據(jù)被指定為由Server1維護(hù),這時原本Server2上可用的緩存也無效了。

          一致性哈希算法

          一致性哈希算法解決了在動態(tài)變化的緩存環(huán)境中,定位目標(biāo)Server的問題,通常的實現(xiàn)可將它想像成一個閉合的環(huán)形。如下圖:

          當(dāng)有節(jié)點失效時,不會影響到正常工作的緩存服務(wù)器,只有原本分配到失效節(jié)點的緩存會被重新分配到下一個節(jié)點。如下圖:

          微信訂閱號:
          原文地址:http://blog.gopersist.com/2015/05/28/memcached/

          posted on 2015-05-31 17:18 老林 閱讀(1583) 評論(2)  編輯  收藏 所屬分類: 緩存技術(shù)

          評論

          # re: Web緩存技術(shù)-Memcached 2015-06-26 22:56 Yanbin
          我一看 Web 緩存技術(shù) 這個標(biāo)題,我就會直接想到 Vanish 這個東西,它才是真正與 Web 相關(guān)的。  回復(fù)  更多評論
            

          # re: Web緩存技術(shù)-Memcached 2015-06-29 12:15 好介紹
          對緩存做了一個好介紹,贊一個!  回復(fù)  更多評論
            


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


          網(wǎng)站導(dǎo)航:
          博客園   IT新聞   Chat2DB   C++博客   博問  
           
          主站蜘蛛池模板: 阳曲县| 巴中市| 塔城市| 荆州市| 虎林市| 临清市| 静安区| 越西县| 陇西县| 盐边县| 集安市| 阳山县| 巴南区| 武隆县| 临高县| 航空| 霍州市| 三河市| 东乌珠穆沁旗| 井冈山市| 新巴尔虎右旗| 峡江县| 西丰县| 天气| 延川县| 获嘉县| 兴隆县| 盐边县| 乌海市| 荔波县| 福建省| 凤庆县| 冀州市| 卫辉市| 永仁县| 富蕴县| 阿拉善右旗| 平舆县| 思南县| 临高县| 郁南县|