1.什么是Memcached?
a.Memcached 是一個高性能的分布式內存對象緩存系統,用於動態Web應用以減輕數據庫負載。它通過在內存中緩存數據和對象來減少讀取數據庫的次數,從而提高動態、數據庫驅動網站的速度。Memcached基於一個存儲鍵/值對的hashmap。其守護進程(daemon )是用C寫的,但是客戶端可以用任何語言來編寫,並通過memcached協議與守護進程通信。
b.Memcached的鍵key一般是字符串,該值不能重復;value可以放入字符串、數組、數值、對象、布爾,二進制數據和圖片視頻
c.Memcached默認服務端口是11211
Window 下安裝 Memcached
官網上並未提供 Memcached 的Window平台安裝包,我們可以使用以下鏈接來下載,你需要根據自己的系統平台及需要的版本號點擊對應的鏈接下載即可:
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、解壓下載的安裝包到指定目錄。
2、在 1.4.5 版本以前 memcached 可以作為一個服務安裝,使用管理員權限運行以下命令:
c:\memcached\memcached.exe -d install
注意:你需要使用真實的路徑替代 c:\memcached\memcached.exe。
3、然后我們可以使用以下命令來啟動和關閉 memcached 服務:
c:\memcached\memcached.exe -d start
c:\memcached\memcached.exe -d stop
4、如果要修改 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" 命令查看更多的參數配置。
5、如果我們需要卸載 memcached ,可以使用以下命令:
c:\memcached\memcached.exe -d uninstall
memcached >= 1.4.5 版本安裝
1、解壓下載的安裝包到指定目錄。
2、在 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" 命令查看更多的參數配置。
3、如果需要刪除 memcached 的任務計划可以執行以下命令:\
schtasks /delete /tn memcached
4、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 顯示幫助
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
二、PHP安裝memcache擴展
1、下載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。
1、windows系統連接memcached端口 cmd命令行中鍵入telnet 192.168.1.1 11211 11211是memcached綁定的端口號。
2、連接上端口后輸入 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