1.什麼是Memcached?php
a.Memcached 是一個高性能的分佈式內存對象緩存系統,用於動態Web應用以減輕數據庫負載。它經過在內存中緩存數據和對象來減小讀取數據庫的次數,從而提升動態、數據庫驅動網站的速度。Memcached基於一個存儲鍵/值對的hashmap。其守護進程(daemon )是用C寫的,可是客戶端能夠用任何語言來編寫,並經過memcached協議與守護進程通訊。linux
b.Memcached的鍵key通常是字符串,該值不能重複;value能夠放入字符串、數組、數值、對象、布爾,二進制數據和圖片視頻web
c.Memcached默認服務端口是11211數據庫
Window 下安裝 Memcached
官網上並未提供 Memcached 的Window平臺安裝包,咱們可使用如下連接來下載,你須要根據本身的系統平臺及須要的版本號點擊對應的連接下載便可:windows
32位系統 1.2.5版本:http://static.runoob.com/download/memcached-1.2.5-win32-bin.zip
32位系統 1.2.6版本:http://static.runoob.com/download/memcached-1.2.6-win32-bin.zip
32位系統 1.4.4版本:http://static.runoob.com/download/memcached-win32-1.4.4-14.zip
64位系統 1.4.4版本:http://static.runoob.com/download/memcached-win64-1.4.4-14.zip
32位系統 1.4.5版本:http://static.runoob.com/download/memcached-1.4.5-x86.zip
64位系統 1.4.5版本:http://static.runoob.com/download/memcached-1.4.5-amd64.zip
在 1.4.5 版本之前 memcached 能夠做爲一個服務安裝,而在 1.4.5 及以後的版本刪除了該功能。所以咱們如下介紹兩個不一樣版本 1.4.4 及 1.4.5的不一樣安裝方法:數組
memcached <1.4.5 版本安裝
一、解壓下載的安裝包到指定目錄。緩存
二、在 1.4.5 版本之前 memcached 能夠做爲一個服務安裝,使用管理員權限運行如下命令:安全
c:\memcached\memcached.exe -d install
注意:你須要使用真實的路徑替代 c:\memcached\memcached.exe。服務器
三、而後咱們可使用如下命令來啓動和關閉 memcached 服務:網絡
c:\memcached\memcached.exe -d start
c:\memcached\memcached.exe -d stop
四、若是要修改 memcached 的配置項, 能夠在命令行中執行 regedit.exe 命令打開註冊表並找到 "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\memcached" 來進行修改。
若是要提供 memcached 使用的緩存配置 能夠修改 ImagePath 爲:
"c:\memcached\memcached.exe" -d runservice -m 512
-m 512 意思是設置 memcached 最大的緩存配置爲512M。
此外咱們還能夠經過使用 "c:\memcached\memcached.exe -h" 命令查看更多的參數配置。
五、若是咱們須要卸載 memcached ,可使用如下命令:
c:\memcached\memcached.exe -d uninstall
memcached >= 1.4.5 版本安裝
一、解壓下載的安裝包到指定目錄。
二、在 memcached1.4.5 版本以後,memcached 不能做爲服務來運行,須要使用任務計劃中來開啓一個普通的進程,在 window 啓動時設置 memcached自動執行。
咱們使用管理員身份執行如下命令將 memcached 添加來任務計劃表中:
schtasks /create /sc onstart /tn memcached /tr "'c:\memcached\memcached.exe' -m 512"
注意:你須要使用真實的路徑替代 c:\memcached\memcached.exe。
注意:-m 512 意思是設置 memcached 最大的緩存配置爲512M。
注意:咱們能夠經過使用 "c:\memcached\memcached.exe -h" 命令查看更多的參數配置。
三、若是須要刪除 memcached 的任務計劃能夠執行如下命令:\
schtasks /delete /tn memcached
四、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 顯示幫助
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
2、PHP安裝memcache擴展
一、下載memcache.dll擴展
下載地址:
http://windows.php.net/downloads/pecl/releases/memcache/3.0.8/
下載注意事項:選擇匹配本身環境的版本以及線程安全版本。
查看本身PHP版本:phpinfo();
對應擴展文件這裏
解壓出來:
將其中的php_memcache.dll 擴展文件拷貝到 php 的擴展目錄中,個人(D:\Xampp\php\ext)
打開php的php.ini文件
最後添加 一行代碼:
extension=php_memcache.dll
而後保存以後,重啓服務器
在使用phpinfo()查看
(若是沒有顯示,確定是版本沒對應)
---------------------------------------------------------------------------------------------------------
memcache服務器安全:
Memcache服務器端都是直接經過客戶端鏈接後直接操做,沒有任何的驗證過程,這樣若是服務器是直接暴露在互聯網上的話是比較危險,輕則數據泄露被其餘無關人員查看,重則服務器被入侵,何況裏面可能存在一些咱們未知的bug或者是緩衝區溢出的狀況,這些都是咱們未知的,因此危險性是能夠預見的。爲了安全起見,作兩點建議,可以稍微的防止黑客的入侵或者數據的泄露。
如今就關於修改memcache服務器配置的問題說明以下:
1>用內網ip的方式提供web應用服務器調用,不容許直接經過外網調用,如將memcache服務器放在192.168.1.55的服務器上
2>修改端口,如改成11200
3>分配內存,如分配1024M(1G內存)
方法以下:
1>開始>運行:CMD(肯定)
2>cd C:\memcached(回車)
3>memcached -m 1024 -p 11200 -l 192.168.1.55(回車)
注意,此時命令行不會回到C:\memcached>狀態,而且實際上memcache服務器悄悄變爲stop狀態了。此窗口不能夠關閉。新開一個cmd窗口
4>開始>運行:CMD(肯定)
5>cd C:\memcached(回車)
6>memcached -d start(回車)能夠關閉此cmd窗口。
此時可使用新配置的memcache服務器了。
上述方法雖然解決了修改默認配置的問題,可是始終會有一個cmd窗口不能夠關閉,不然就回到11211端口的默認配置。
更好的解決方案是經過修改服務的註冊表配置:
1>開始>運行:regedit(回車)
2>在註冊表中找到:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\memcached Server
3>默認的ImagePath鍵的值是:"c:\memcached\memcached.exe" -d runservice,改成:"c:\memcached\memcached.exe" -d runservice -m 512 -p 11200 -l 192.168.1.55(肯定,關閉註冊表)
4>個人電腦(右鍵)>管理>服務 找到memcache的服務,從新啓動一次便可生效。
此時,同網段內的電腦仍然能夠利用這臺memcache服務器,咱們限定指定的web應用服務器纔可以使用,經過防火牆的方式。如只容許192.168.1.2這臺Web服務器對Memcache服務器的訪問,可以有效的阻止一些非法訪問,相應的也能夠增長一些其餘的規則來增強安全性,這個能夠根據本身的須要來作。
Memcache服務器端都是直接經過客戶端鏈接後直接操做,沒有任何的驗證過程,這樣若是服務器是直接暴露在互聯網上的話是比較危險,輕則數據泄露被其餘無關人員查看,重則服務器被入侵,由於Mecache是以root權限運行的,何況裏面可能存在一些咱們未知的bug或者是緩衝區溢出的狀況,這些都是咱們未知的,因此危險性是能夠預見的。爲了安全起見,我作兩點建議,可以稍微的防止黑客的入侵或者數據的泄露。
內網訪問
最好把兩臺服務器之間的訪問是內網形態的,通常是Web服務器跟Memcache服務器之間。廣泛的服務器都是有兩塊網卡,一塊指向互聯網,一塊指向內網,那麼就讓Web服務器經過內網的網卡來訪問Memcache服務器,咱們Memcache的服務器上啓動的時候就監聽內網的IP地址和端口,內網間的訪問可以有效阻止其餘非法的訪問。
# memcached -d -m 1024 -u root -l 192.168.0.200 -p 11211 -c 1024 -P /tmp/memcached.pid
Memcache服務器端設置監聽經過內網的192.168.0.200的ip的11211端口,佔用1024MB內存,而且容許最大1024個併發鏈接
設置防火牆
防火牆是簡單有效的方式,若是倒是兩臺服務器都是掛在網的,而且須要經過外網IP來訪問Memcache的話,那麼能夠考慮使用防火牆或者代理程序來過濾非法訪問。
通常咱們在Linux下可使用iptables或者FreeBSD下的ipfw來指定一些規則防止一些非法的訪問,好比咱們能夠設置只容許咱們的Web服務器來訪問咱們Memcache服務器,同時阻止其餘的訪問。
# iptables -F
# iptables -P INPUT DROP
# iptables -A INPUT -p tcp -s 192.168.0.2 –dport 11211 -j ACCEPT
# iptables -A INPUT -p udp -s 192.168.0.2 –dport 11211 -j ACCEPT
上面的iptables規則就是隻容許192.168.0.2這臺Web服務器對Memcache服務器的訪問,可以有效的阻止一些非法訪問,相應的也能夠增長一些其餘的規則來增強安全性,這個能夠根據本身的須要來作
不少時候須要監控服務器上的Memcached運行狀況,好比緩存的查詢次數,命中率之類的。但找到的
那個memcached-tool是linux下用perl寫的,我也沒試過windows能不能用。後來發現個簡單的辦法能夠作到,就是使用Telnet。
一、windows系統鏈接memcached端口 cmd命令行中鍵入telnet 192.168.1.1 11211 11211是memcached綁定的端口號。
二、鏈接上端口後輸入 stats命令,便可獲得描述Memcached服務器運行狀況的參數。
STAT pid 4356 服務器進程ID
STAT uptime 56625 服務器運行時間,單位秒
STAT time 1225249079 服務器當前的UNIX時間
STAT version 1.1.0 服務器的版本號
STAT pointer_size 64
STAT rusage_user 151.845489 該進程累計的用戶時間(秒:微妙)
STAT rusage_system 121.667603 該進程累計的系統時間(秒:微妙)
STAT ibuffer_size 4096
STAT curr_connections 13 鏈接數量
STAT total_connections 54136 服務器運行以來接受的鏈接總數
STAT connection_structures 318 服務器分配的鏈接結構的數量
STAT cmd_get 100595 取回請求總數
STAT cmd_set 6510 存儲請求總數
STAT get_hits 96543 請求成功的總次數
STAT get_misses 4052 請求失敗的總次數
STAT bytes_read 4427679 服務器從網絡讀取到的總字節數
STAT bytes_written 6585596 服務器向網絡發送的總字節數
1>、uptime 是memcached運行的秒數, 2>、cmd_get是查詢緩存的次數。 3>、這兩個數據相除一下就能獲得平均每秒請求緩存的次數——最近niupu的流量很低,因此平均也就一秒請求一次多, 這麼點大的壓力,用文件系統緩存同樣沒問題,根本不會體現出使用memcached的優越。 4>、下面的cmd_set 就是設置key=>value的次數。整個memcached是個大hash,用cmd_get沒有找到的內 容,就會調用一下cmd_set寫進緩存裏。 5>、緊跟着是get_hits,就是緩存命中的次數。緩存命中率 = get_hits/cmd_get * 100%。 6>、下面的get_misses的數字加上get_hits應該等於cmd_get。 7>、而total_itemscurr_items表示如今在緩存中的鍵值對個數. 8>、在圖上total_items == cmd_set == get_misses,不過當可用最大內存用光時,memcached就會刪掉一些內容,上面的等式就不成立了--------------------- 原文:https://blog.csdn.net/ad132126/article/details/79537928