說明
memcached 是一個分散式的物件快取系統,只要有適當的 API ,任何有支援的程式語言都可以用它來存放相關的變數資訊。例如我們可以利用 memcached 來管理 PHP 的 Session ,提高 Web 網站的運作效能。
安裝
這裡安裝的是 memecached for Win32 版本,其他平台的版本可以到 memcached 官方網站下載。
-
請到 memcached for Win32 下載最新的版本,這裡我下載的是 memcached 1.2.0 release candidate 1b for Win32 binaries 。
-
將 memcached-1.2.0-rc1b-win32.zip 解壓縮至 D:\Appserv\memcached 下。 (其實放哪兒都可以,這裡我只是為了說明方便。)
-
打開 Command Line 視窗,切換到 D:\Appserv\memcached ,並輸入以下指令:
1D:\Appserv\memcached>sc create memcached binPath= "D:\Appserv\memcached\memcached.exe -p 9999 -l 127.0.0.1 -m 128 -d runservice" DisplayName= "memcached server" start= auto depend= TCPIP其中 -p 9999 是指透過 port 9999 監聽請求 (預設為 11211 ) , -l 127.0.0.1 是指伺服器指定的 IP 位址 (預設為 INDRR_ANY) , -m 128 是指 memcached 最大可用的記憶體為 128 MB (預設 64 MB) ,最後 -d runservice 就是啟動為 Windows 服務。
註: memcached for Win32 有提供 -d install 指令,但是無法指定 port 及記憶體大小,故不建議使用。
-
完成後就可以到服務管理員啟動 memcached 服務。
測試
這裡我用的是 PHP 5.2 ,當然你可以使用任何一種支援 memcached 的語言來測試。
-
首先我們得到 PECL for Win 去下載 memcached for PHP 的函式庫 (php_memcache.dll) ,這裡當然要下載 5.2.0 對應的版本。
-
把 php_memcache.dll 下載回來後把它丟到 PHP 安裝目錄下的 ext 資料夾。
-
在 php.ini 裡加入:
1extension=php_memcache.dll -
重新啟動 Apache 或 IIS ,如果要跑的是 CLI 模式的話就不用了。
好了,接下來先看看以下的程式,我是用 CLI 模式來執行它。
先用 Memcache 類別連接到 memcached 伺服器:
1 2 | |
然後我們可以用以下程式來得知 memcached 的版本:
1 2 | |
試試建立一個 stdClass 物件,然後用 Memcache 的 set 方法把它存到 memcached 伺服器上:
1 2 3 4 5 6 7 8 | |
能存進去就要能拿回來,我們可以用 Memcache 的 get 方法來完成。不過在拿之前,先暫停個 5 秒,看看這個物件是不是還活著:
1 2 3 4 | |
再來一次,這次應該是找不到了:
1 2 3 4 | |
整個完整執行結果如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | |
當然這只是小試一下,真正在實作上,我們應該先判斷物件是不是存在於 memcached 伺服器,沒有的話就自己生一個,再存回 memcached 伺服器上。程式實作如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | |
我們還可以用 addServer 方法來同時連接多個 memcached 伺服器,這裡就不多談了。
安全性
目前 memcached 似乎沒有好的認證機制,所以只要知道 port 以及 key ,就能夠長驅直入,對 memcached 中的資料做存取。所以最好能夠利用防火牆等外部工具,對相關的存取權限做好設定,避免攻擊事件發生。