一 安裝篇
1. 下載下傳memcache的windows穩定版,解壓放某個盤下面,比如在c:/memcached
2. 開始→運作→輸入cmd回車→輸入 ‘c:/memcached/memcached.exe -d install’ 安裝
3. 再輸入: ‘c:/memcached/memcached.exe -d start’ 啟動。
note: 以後memcached将作為windows的一個服務每次開機時自動啟動。這樣伺服器端已經安裝完畢了。
4.下載下傳php_memcache.dll,請自己查找對應的php版本的檔案 (放在php安裝目錄下的ext目錄下) d:/wamp/php/ext/
5. 在c:/winnt/php.ini 加入一行 extension=php_memcache.dll (加入到 php.ini 裡面)
6.重新啟動apache,然後檢視一下phpinfo,如果有memcache,那麼就說明安裝成功!
7、此時進入memcahe下測試,輸入telnet localhost 11211可以進入memcahe下,當然可能會提示telnet不是内部指令或者外部指令什麼的錯誤,當然我這裡說的是windows7下的,win7其實自帶有telnet指令,隻是預設并沒有安裝,好吧下步驟做:
開始–>控制台–>程式和功能 2.左側 打開或者關閉windows功能 3.找到telnet用戶端,選擇安裝
那麼就可以了
二 解除安裝篇
windows下的memcache解除安裝:
memcached -d stop
memcached -d remove
sc delete "memcached server"
三 說明篇
memcached的基本設定:
-p 監聽的端口
-l 連接配接的ip位址, 預設是本機
-d start 啟動memcached服務
-d restart 重起memcached服務
-d stop|shutdown 關閉正在運作的memcached服務
-d install 安裝memcached服務
-d uninstall 解除安裝memcached服務
-u 以的身份運作 (僅在以root運作的時候有效)
-m 最大記憶體使用,機關mb。預設64mb
-m 記憶體耗盡時傳回錯誤,而不是删除項
-c 最大同時連接配接數,預設是1024
-f 塊大小增長因子,預設是1.25-n 最小配置設定空間,key+value+flags預設是48
-h 顯示幫助
四 測試篇
memcache的測試代碼:
memcache 的 預設 端口号碼是 11211
相關指令:
<a target="_blank">表 1. memcached 修改指令參數</a>
參數
用法
key
key 用于查找緩存值
flags
可以包括鍵值對的整型參數,客戶機使用它存儲關于鍵值對的額外資訊
expiration time
在緩存中儲存鍵值對的時間長度(以秒為機關,0 表示永遠)
bytes
在緩存中存儲的位元組點
value
存儲的值(始終位于第二行)
現在,我們來看看這些指令的實際使用。
set
<code>set</code> 指令用于向緩存添加新的鍵值對。如果鍵已經存在,則之前的值将被替換。
注意以下互動,它使用了 <code>set</code> 指令:
set userid 0 0 5 12345 stored
如果使用 <code>set</code> 指令正确設定了鍵值對,伺服器将使用單詞 stored 進行響應。本示例向緩存中添加了一個鍵值對,其鍵為 <code>userid</code>,其值為 <code>12345</code>。并将過期時間設定為
0,這将向 memcached 通知您希望将此值存儲在緩存中直到删除它為止。
add
僅當緩存中不存在鍵時,<code>add</code> 指令才會向緩存中添加一個鍵值對。如果緩存中已經存在鍵,則之前的值将仍然保持相同,并且您将獲得響應 not_stored。
下面是使用 <code>add</code> 指令的标準互動:
set userid 0 0 5 12345 stored add userid 0 0 5 55555 not_stored add companyid 0 0 3 564 stored
replace
僅當鍵已經存在時,<code>replace</code> 指令才會替換緩存中的鍵。如果緩存中不存在鍵,那麼您将從 memcached 伺服器接受到一條 not_stored 響應。
下面是使用 <code>replace</code> 指令的标準互動:
replace accountid 0 0 5 67890 not_stored set accountid 0 0 5 67890 stored replace accountid 0 0 5 55555 stored
最後兩個基本指令是 <code>get</code> 和 <code>delete</code>。這些指令相當容易了解,并且使用了類似的文法,如下所示:
command <key>
接下來看這些指令的應用。
get
<code>get</code> 指令用于檢索與之前添加的鍵值對相關的值。您将使用 <code>get</code> 執行大多數檢索操作。
下面是使用 <code>get</code> 指令的典型互動:
set userid 0 0 5 12345 stored get userid value userid 0 5 12345 end get bob end
如您所見,<code>get</code> 指令相當簡單。您使用一個鍵來調用 <code>get</code>,如果這個鍵存在于緩存中,則傳回相應的值。如果不存在,則不傳回任何内容。
delete
最後一個基本指令是 <code>delete</code>。<code>delete</code> 指令用于删除 memcached 中的任何現有值。您将使用一個鍵調用<code>delete</code>,如果該鍵存在于緩存中,則删除該值。如果不存在,則傳回一條 not_found 消息。
下面是使用 <code>delete</code> 指令的客戶機伺服器互動:
set userid 0 0 5 98765 stored delete bob not_found delete userid deleted get userid en
可以在 memcached 中使用的兩個進階指令是 <code>gets</code> 和 <code>cas</code>。<code>gets</code> 和 <code>cas</code> 指令需要結合使用。您将使用這兩個指令來確定不會将現有的名稱/值對設定為新值(如果該值已經更新過)。我們來分别看看這些指令。
進階指令
gets
<code>gets</code> 指令的功能類似于基本的 <code>get</code> 指令。兩個指令之間的差異在于,<code>gets</code> 傳回的資訊稍微多一些:64
位的整型值非常像名稱/值對的 “版本” 辨別符。
下面是使用 <code>gets</code> 指令的客戶機伺服器互動:
set userid 0 0 5 12345 stored get userid value userid 0 5 12345 end gets userid value userid 0 5 4 12345
end
考慮 <code>get</code> 和 <code>gets</code> 指令之間的差異。<code>gets</code> 指令将傳回一個額外的值 — 在本例中是整型值 4,用于辨別名稱/值對。如果對此名稱/值對執行另一個 <code>set</code> 指令,則 <code>gets</code> 傳回的額外值将會發生更改,以表明名稱/值對已經被更新。清單
6 顯示了一個例子:
<a target="_blank">清單 6. set 更新版本訓示符</a>
set userid 0 0 5 33333 stored gets userid value userid 0 5 5 33333
您看到 <code>gets</code> 傳回的值了嗎?它已經更新為 5。您每次修改名稱/值對時,該值都會發生更改。
cas
<code>cas</code>(check 和 set)是一個非常便捷的 memcached 指令,用于設定名稱/值對的值(如果該名稱/值對在您上次執行 <code>gets</code> 後沒有更新過)。它使用與 <code>set</code> 指令相類似的文法,但包括一個額外的值:<code>gets</code> 傳回的額外值。
注意以下使用 <code>cas</code> 指令的互動:
set userid 0 0 5 55555 stored gets userid value userid 0 5 6 55555
end cas userid 0 0 5 6 33333 stored
如您所見,我使用額外的整型值 6 來調用 <code>gets</code> 指令,并且操作運作非常順序。現在,我們來看看清單 7 中的一系列指令:
<a target="_blank">清單 7. 使用舊版本訓示符的 <code>cas</code> 指令</a>
set userid 0 0 5 55555 stored gets userid value userid 0 5 8 55555
end cas userid 0 0 5 6 33333 exists
注意,我并未使用 <code>gets</code> 最近傳回的整型值,并且 <code>cas</code> 指令傳回 exists 值以示失敗。從本質上說,同時使用<code>gets</code> 和 <code>cas</code> 指令可以防止您使用自上次讀取後經過更新的名稱/值對。
<a target="_blank">緩存管理指令</a>
最後兩個 memcached 指令用于監控和清理 memcached 執行個體。它們是 <code>stats</code> 和 <code>flush_all</code> 指令。
stats
<code>stats</code> 指令的功能正如其名:轉儲所連接配接的 memcached 執行個體的目前統計資料。在下例中,執行 <code>stats</code> 指令顯示了關于目前 memcached 執行個體的資訊:
stats stat pid 63 stat uptime 101758 stat time 1248643186 stat version 1.4.11 stat pointer_size 32 stat rusage_user 1.177192 stat rusage_system 2.365370 stat curr_items 2 stat total_items
8 stat bytes 119 stat curr_connections 6 stat total_connections 7 stat connection_structures 7 stat cmd_get 12 stat cmd_set 12 stat get_hits 12 stat get_misses 0 stat evictions 0 stat bytes_read 471 stat bytes_written 535 stat limit_maxbytes 67108864 stat
threads 4 end
此處的大多數輸出都非常容易了解。稍後在讨論緩存性能時,我還将詳細解釋這些值的含義。至于目前,我們先來看看輸出,然後再使用新的鍵來運作一些 <code>set</code> 指令,并再次運作 <code>stats</code> 指令,注意發生了哪些變化。
flush_all
<code>flush_all</code> 是最後一個要介紹的指令。這個最簡單的指令僅用于清理緩存中的所有名稱/值對。如果您需要将緩存重置到幹淨的狀态,則 <code>flush_all</code> 能提供很大的用處。下面是一個使用 <code>flush_all</code> 的例子:
set userid 0 0 5 55555 stored get userid value userid 0 5 55555 end flush_all ok get userid end
<a target="_blank">緩存性能</a>
在本文的最後,我将讨論如何使用進階 memcached 指令來确定緩存的性能。<code>stats</code> 指令用于調優緩存的使用。需要注意的兩個最重要的統計資料是 et_hits 和 get_misses。這兩個值分别訓示找到名稱/值對的次數(get_hits)和未找到名稱/值對的次數(get_misses)。
結合這些值,我們可以确定緩存的使用率如何。初次啟動緩存時,可以看到 get_misses 會自然地增加,但在經過一定的使用量之後,這些 get_misses 值應該會逐漸趨于平穩 — 這表示緩存主要用于常見的讀取操作。如果您看到 get_misses 繼續快速增加,而 get_hits 逐漸趨于平穩,則需要确定一下所緩存的内容是什麼。您可能緩存了錯誤的内容。
确定緩存效率的另一種方法是檢視緩存的命中率(hit ratio)。緩存命中率表示執行 <code>get</code> 的次數與錯過 <code>get</code>的次數的百分比。要确定這個百分比,需要再次運作 <code>stats</code> 指令,如清單 8 所示:
<a target="_blank">清單 8. 計算緩存命中率</a>
stats stat pid 6825 stat uptime 540692 stat time 1249252262 stat version 1.2.6 stat pointer_size 32 stat rusage_user 0.056003 stat rusage_system 0.180011 stat curr_items 595 stat total_items
961 stat bytes 4587415 stat curr_connections 3 stat total_connections 22 stat connection_structures 4 stat cmd_get 2688 stat cmd_set 961 stat get_hits 1908 stat get_misses 780 stat evictions 0 stat bytes_read 5770762 stat bytes_written 7421373 stat limit_maxbytes
536870912 stat threads 1 end
現在,用 get_hits 的數值除以 cmd_gets。在本例中,您的命中率大約是 71%。在理想情況下,您可能希望得到更高的百分比 — 比率越高越好。檢視統計資料并不時測量它們可以很好地判定緩存政策的效率。
常有指令如下:
啟動/結束
memcached -d -m 10 -u root -l 192.168.0.122 -p 11200 -c 256 -p /tmp/memcached.pid
-d 選項是啟動一個守護程序,
-m 是配置設定給memcache使用的記憶體數量,機關是mb,這裡是10mb
-u 是運作memcache的使用者,這裡是root
-l 是監聽的伺服器ip位址,如果有多個位址的話,這裡指定了伺服器的ip位址192.168.0.122
-p 是設定memcache監聽的端口,這裡設定了12000,最好是1024以上的端口
-c 選項是最大運作的并發連接配接數,預設是1024,這裡設定了256,按照你伺服器的負載量來設定
-p 是設定儲存memcache的pid檔案
kill `cat /tmp/memcached.pid`
擷取運作狀态
echo stats | nc 192.168.1.123 11200
watch "echo stats | nc 192.168.1.123 11200" (實時狀态)