三臺linux服務器系統CentOS7 一臺memcached IP:192.168.155.134 一臺Apache IP:192.168.155.130 一臺nginx IP:192.168.155.131 memcached服務器 memcached 下載地址http://memcached.org/ wget下載路徑http://www.memcached.org/files/memcached-1.4.25.tar.gz 這裏用到的是 memcached-1.4.25.tar.gz memcached基於libevent的事件處理:libevent是個程序庫,他將Linux 的epoll、BSD類操做系統的kqueue等時間處理功能封裝成統一的接口。memcached使用這個libevent庫,所以能在Linux、BSD、Solaris等操做系統上發揮其高性能 libevent 下載地址http://libevent.org/ wget下載路徑http://jaist.dl.sourceforge.net/project/levent/release-2.0.22-stable/libevent-2.0.22-stable.tar.gz 這裏用到的是 libevent-2.0.22-stable.tar.gz 用 WinSCP上傳到指定的目錄下,這裏是 /usr/local/src shell端 查詢系統是否已安裝libevent RPM是RedHat Package Manager(RedHat軟件包管理工具)相似Windows裏面的「添加/刪除程序」 -i :install 安裝 -v :顯示詳細信息 -vv :顯示更加詳細的信息 -h :使用#顯示安裝進度 -U :軟件存在則升級軟件,不存在則安裝軟件 -F :軟件存在則升級軟件,不存在則不作任何動做 -e :程序卸載--nodeps 不卸載相關依賴包,可能致使其餘軟件沒法使用 -q : 查詢某個包是否安裝 --test :僅測試是否能夠安裝,可是不進行安裝 --nodeps :不考慮依賴關係進行安裝,可能形成軟件沒法正常使用 --force :忽略軟件包及文件的衝突 --replacepkge :不管軟件包是否已被安裝,都強行安裝軟件包 --replacepkgs :從新安裝軟件包,如原有配置文件存在,可能沒法覆蓋 以下參數只能配合-q組合使用如-qa在全部已安裝包中查詢是否安裝某個包 -a, --all : 查詢/驗證全部包 -p, --package : 查詢/驗證包文件 -l, --list : 查詢包中的列表文件 -d, --docfiles : 查詢列表全部文檔文件 -f, --file : 查詢/驗證包擁有的文件 例rpm -ivh zsh-4.3.10-4.1.el6.x86_64.rpm安裝zsh-4.3.10-4.1.el6.x86_64.rpm並顯示詳細信息和安裝進度 |grep 搜索命令的輸出中是否包含某個字符串,加亮顯示(這裏是-qa命令輸出的字符串中查找) 這裏顯示libevent-2.0.21-4.el7.x86_64,說明已安裝libevent-2.0.21-4.el7.x86_64 rpm -qa|grep libevent 卸載已安裝的libevent rpm -e libevent-2.0.21-4.el7.x86_64 進入到安裝包目錄 cd /usr/local/src 解壓縮libevent到當前文件夾 tar -zxvf libevent-2.0.22-stable.tar.gz 進入解壓縮目錄 cd libevent-2.0.22-stable 配置安裝目錄 ./configure --prefix=/usr/local/libevent 編譯 make 安裝 make install 返回上級目錄 cd ../ 解壓縮memcached到當前文件夾 這個壓縮包沒有用gzip格式壓縮 因此解壓的時候也不用加上z,直接 tar -xvf 就能夠了 tar -xvf memcached-1.4.25.tar.gz 進入解壓縮目錄 cd memcached-1.4.25 配置安裝目錄,及關聯的libevent庫安裝目錄 ./configure --prefix=/usr/local/memcached --with-libevent=/usr/local/libevent 編譯 make 安裝 make install 建立文件夾用來保存memcached的進程文件 mkdir -m777 -p /usr/local/memcached/pid 啓動memcached -d 選項是啓動一個守護進程。 -u 表示啓動memcached的用戶,這裏爲root,能夠指定低權限用戶啓動memcached。 -m 是分配給Memcache使用的內存數量,單位是MB,默認64MB。內容容量達到指定的值以後memcached回自動刪除不適用的緩存 -p 是設置Memcache的TCP監聽的端口,最好是1024以上的端口,memcached默認端口11211。 -c 選項是最大運行的併發鏈接數,按照服務器的負載量來設定,默認是1024。 -P 是設置保存Memcache的pid文件,也就是保存進程ID到指定文件,只有在使用 -d 選項的時候纔有意義。 -vv 輸出詳細信息 也能夠啓動多個守護進程,可是端口不能重複。這樣就能夠在一臺機器上至關擁有多個Memcached服務器 /usr/local/memcached/bin/memcached -d -m 256 -u root -p 11211 -c 1024 -P /usr/local/memcached/pid/memcached.pid -vv 殺死memcached進程 kill `cat /usr/local/memcached/pid/memcached.pid` /* 或者能夠查看11211端口使用狀況獲取使用進程ID lsof -i:11211 直接用kill 進程ID 來殺死進程,這裏memcached的進程ID是20146 kill 20146 */ 將memcached放到service控制中將下面代碼新建保存到/etc/init.d/memcached中 #!/bin/bash # memcached MemCached # it is v.1.4.25 version. # chkconfig: - 85 15 # description: memcached is very good # processname: memcached MEMCACHED="/usr/local/memcached/bin/memcached" PID_FILE="/usr/local/memcached/pid/memcached.pid" # Source function library. . /etc/rc.d/init.d/functions # Source networking configuration. . /etc/sysconfig/network start() { $MEMCACHED -d -m 256 -u root -p 11211 -c 1024 -P ${PID_FILE} } stop() { kill `cat $PID_FILE` } restart(){ stop start } case "$1" in start) start ;; stop) stop ;; restart) stop sleep 3 start ;; *) echo $"Usage: 0 {start|stop|restart}" exit 1 esac exit 0 :wq 保存並退出 vim /etc/init.d/memcached 設置文件的訪問權限 chmod 755 /etc/init.d/memcached 可使用service控制memcached啓用關閉了 service memcached start 讓memcached服務加入到開機啓動指令管理的服務列表中 chkconfig --add memcached 設置開機啓動 chkconfig memcached on 開啓防火牆11211端口的外部訪問 firewall-cmd --zone=public --add-port=11211/tcp --permanent 重啓防火牆 firewall-cmd --reload Apache和nginx服務器 memcache是PHP的memcached擴展 下載地址http://pecl.php.net/package/memcache wget下載路徑http://pecl.php.net/get/memcache-2.2.7.tgz 這裏用到的是 memcache-2.2.7.tgz 用 WinSCP上傳到指定的目錄下,這裏是 /usr/local/src shell端 先安裝m4,autoconf。m4是autoconf必要程序,一會要使用phpize會用到autoconf yum install m4 autoconf 進入到安裝包目錄 cd /usr/local/src 解壓縮memcache到當前文件夾 tar -zxvf memcache-2.2.7.tgz 進入解壓縮目錄 cd memcache-2.2.7 執行phpize,動態加載PHP擴展模塊 phpize在PHP安裝路徑下的bin文件夾中(執行phpize及下面的配置,編譯,安裝時,當前路徑位置必定要在PHP擴展程序的解壓縮目錄中執行,這裏是/usr/local/src/memcache-2.2.7目錄中) /usr/local/php/bin/phpize 配置,php-config在PHP安裝路徑下的bin文件夾中 ./configure --with-php-config=/usr/local/php/bin/php-config 編譯 make 安裝擴展後會在PHP安裝路徑裏/usr/local/php/lib/php/extensions下自動生成一個文件夾(apache,nginx下生成的文件夾名不同),裏面包含memcache.so make install 修改php.ini文件,加載memcache.so模塊 在一堆extension下面添加 extension=memcache.so vim /usr/local/php/php.ini 重啓服務器 apache用service httpd restart,nginx用service php-fpm restart service httpd restart 或者 service php-fpm restart 在Apache和nginx服務器上新建PHP頁面添加以下內容,執行測試memcached <?php $mem = new Memcache;//建立一個memcache對象 //'127.0.0.1'表示安裝 Memcache 的機器IP,11211 鏈接 Memcache 所需的端口號,也是 Memcache 的默認端口號 $mem->connect('192.168.155.134', 11211); //能夠用connect方法鏈接單個memcached服務器,也能夠用addServer組成分佈式memcached。addServer方法可替代connect來鏈接memcached服務器 //addServer至關把全部用addServer的memcached服務器合成一個大memcached服務器,內存累加,不用關心往哪一個memcached服務器添加數據,客戶端memcache擴展模塊會自動控制往某臺memcached服務器存值,取值 //memcached服務器不互通訊的分佈式:memcached儘管是「分佈式」緩存服務器,但服務器端並無分佈式功能。各個memcached不會互相通訊以共享信息。他的分佈式主要是經過客戶端實現的。 //這裏只有一臺memcached服務器,以添加端口模擬添加一臺memcached服務器 $mem->addServer('192.168.155.134', 11211); $mem->addServer('192.168.155.134', 11212);//要使用此端口需在memcached服務器上添加該端口的memcached服務 /usr/local/memcached/bin/memcached -d -m 256 -u root -p 11212 -c 1024 -P /usr/local/memcached/pid/memcached.pid -vv //經常使用操做 //不一樣客戶端可共享memcached服務器裏保存的鍵及值 //往Memcache中自定義鍵值中存入數據 $mem->set('keyName', ' a value', 0, 60); //獲取Memcache中指定鍵值的值 $val = $mem->get('keyName'); echo $val; exit; //替換 $mem->set('keyName', ' a value', 0, 60); $mem->replace('keyName', 'This is replace value', 0, 60); $val = $mem->get('keyName'); echo $val; exit; //保存數組數據 $arr = array('aaa', 'bbb', 'ccc', 'ddd'); $mem->set('keyName', $arr, 0, 60); $val = $mem->get('keyName'); var_dump($val); exit; //刪除數據 $mem->set('keyName', ' a value', 0, 60); $mem->delete('keyName'); $val = $mem->get('keyName'); echo $val; exit; //清除全部數據 $mem->set('keyName', ' a value', 0, 60); $mem->set('keyName2', ' a value', 0, 60); $mem->flush(); $val = $mem->get('keyName'); $val2 = $mem->get('keyName2'); echo $val,$val2; exit; //關閉鏈接 $mem->close(); ?> 附 linux啓動memcached選項 -p : 監聽的TCP端口(默認: 11211) -U : 監聽的UDP端口(默認: 11211, 0表示不監聽) -s : 用於監聽的UNIX套接字路徑(禁用網絡支持) -a : UNIX套接字訪問掩碼,八進制數字(默認:0700) -l : 監聽的IP地址。(默認:INADDR_ANY,全部地址) -d : 做爲守護進程來運行。 -r : 最大核心文件限制。 -u : 設定進程所屬用戶。(只有root用戶可使用這個參數) -m : 單個數據項的最大可用內存,以MB爲單位。(默認:64MB) -M : 內存用光時報錯。(不會刪除數據) -c : 最大併發鏈接數。(默認:1024) -k : 鎖定全部內存頁。注意你能夠鎖定的內存上限。試圖分配更多內存會失敗的,因此留意啓動守護進程時所用的用戶可分配的內存上限。(不是前面的 -u 參數;在sh下,使用命令"ulimit -S -l NUM_KB"來設置。) -v : 提示信息(在事件循環中打印錯誤/警告信息。) -vv : 詳細信息(還打印客戶端命令/響應) -vvv : 超詳細信息(還打印內部狀態的變化) -h : 打印這個幫助信息並退出。 -i : 打印memcached和libevent的許可。 -P : 保存進程ID到指定文件,只有在使用 -d 選項的時候纔有意義。 -f : 塊大小增加因子。(默認:1.25) -n : 分配給key+value+flags的最小空間(默認:48) -L : 嘗試使用大內存頁(若是可用的話)。提升內存頁尺寸能夠減小"頁表緩衝(TLB)"丟失次數,提升運行效率。爲了從操做系統得到大內存頁,memcached會把所有數據項分配到一個大區塊。 -D : 使用 做爲前綴和ID的分隔符。這個用於按前綴得到狀態報告。默認是":"(冒號)。若是指定了這個參數,則狀態收集會自動開啓;若是沒指定,則須要用命令"stats detail on"來開啓。 -t : 使用的線程數(默認:4) -R : 每一個鏈接可處理的最大請求數。 -C : 禁用CAS。 -b : 設置後臺日誌隊列的長度(默認:1024) -B : 綁定協議 - 可能值:ascii,binary,auto(默認) -I : 重寫每一個數據頁尺寸。調整數據項最大尺寸。