爲LNMP架構添加memcached支持,並完成對緩存效果的測試報告;
memcache由LiveJournal的Brad Fitzpatrick開發,是一個自由、高性能、分佈式的分佈式內存對象緩存系統,
用於動態Web應用以減輕數據庫的負載。它通過在內存中緩存數據和對象來減少讀取數據庫的次數,從而提高了網站訪問的速度。
MemCaChe是一個存儲鍵值對的HashMap,在內存中對任意的數據(比如字符串、對象等)所使用的key-value存儲,
數據可以來自數據庫調用、API調用,或者頁面渲染的結果。
測試環境爲: 服務器爲192.168.1.188 centos7.2 用一臺服務器測試:
一、創建LNMP架構:
[root@node1 ~]#yum install mariadb-server -y ###安裝mariadb
[root@node1 ~]#vim /etc/my.cnf
skip_name_resolve= ON
innodb_file_per_table= ON
[root@node1 ~]#systemctl start mariadb.service
[root@node1 ~]#yum install php-fpm php-mysql php-mbstring php-gd php-xml -y
###安裝php-fpm
[root@node1 ~]#systemctl start php-fpm
[root@node1 ~]#yum install nginx -y ###安裝nginx
[root@node1nginx]# vim /etc/nginx/nginx.conf ###編輯nginx配置
location ~ \.php$ {
root html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME/usr/share/nginx/html$fastcgi_script_name;
include fastcgi_params;
}
[root@node1 ~]#systemctl start nginx
二、下面我們來使用memcached:
[root@node1 ~]#yum install memcached -y ###安裝memcached
[root@node1 ~]#systemctl start memcached.service
[root@node1 ~]# ss-tunl ###監聽在tcp和udp 11211端口
udp UNCONN 0 0 :::11211 :::*
tcp LISTEN 0 128 *:11211 *:*
mencached默認工作於文本協議,使用telnet來連接:
[root@node1 ~]#yum -y install telnet
[root@node1 ~]#telnet 192.168.0.188 11211
Trying192.168.0.188...
Connected to192.168.0.188.
Escape characteris '^]'.
stats ###列出當前MemCache服務器的狀態
STAT pid 3540 ###進程id
STAT uptime 25383 ###運行時間
STAT time1503608657 ###當前時間戳
STAT version1.4.15 ###版本號
STAT libevent2.0.21-stable ###libvent版本
STAT pointer_size64 ###當前操作系統的指針大小
STAT rusage_user1.063021 ###進程的累積用戶時間
STAT rusage_system0.664388 ###累積系統時間
STATcurr_connections 10 ###服務器當前存儲的items數量
STATtotal_connections 11 ###啓動以後存儲的items總數量
STATconnection_structures 11 ###服務器分配的連接構造數
STAT reserved_fds20
STAT cmd_get 0 ### get命令(獲取)總請求數
STAT cmd_set 0 ### set命令(獲取)總請求數
STAT cmd_flush 0 ### flush命令請求數
STAT cmd_touch 0 ### touch命令請求次數
STAT get_hits 0 ###總命中次數
STAT get_misses 0 ###未命中次數
STAT delete_misses0 ### delete命令未命中次數
STAT delete_hits 0 ### delete命中次數
STAT incr_misses 0
STAT incr_hits 0
STAT decr_misses 0
STAT decr_hits 0
STAT cas_misses 0
STAT cas_hits 0
STAT cas_badval 0
STAT touch_hits 0
STAT touch_misses0
STAT auth_cmds 0 ###認證命令處理次數
STAT auth_errors 0 ###認證失敗數
STAT bytes_read 19 ###總讀取字節數(請求字節數)
STAT bytes_written14 ###總髮送字節數(結果字節數)
STATlimit_maxbytes 67108864 ###分配給memcached的內存大小(字節)
STATaccepting_conns 1 ###服務器是否達到最大連接(0/1
STATlisten_disabled_num 0 ###失效的監聽數
STAT threads 4 ###當前線程數
STAT conn_yields 0 ###連接操作主動放棄數
STAThash_power_level 16
STAT hash_bytes524288
STAThash_is_expanding 0
STAT bytes 0 ###當前存儲佔用的字節數
STAT curr_items 0 ###當前存儲的數據總數
STAT total_items 0 ###啓動以來存儲的數據總數
STATexpired_unfetched 0
STAT evicted_unfetched0
STAT evictions 0
STAT reclaimed 0 ###已過期的數據條目來存儲新數據的數目
END
[root@node1 ~]#yum install libmemcached -y ### 提供工具程序的程序包
三、安裝PHP的memcached的擴展
php連接memcached服務的模塊有兩個,php-pecl-memcache和php-pecl-memcached.
若要安裝php-pecl-memcached需要依賴libmemcached程序包,可以提供相應操作查看memcached的工具。
在這裏爲方便演示就直接使用php-pecl-memcache擴展模塊。
[root@node1 ~]#yum install php-pecl-memcache -y
測試PHP是否支持Memcached
[root@node1 ~]#vim /usr/share/nginx/html/index.php
<?php
phpinfo();
?>
四、測試memcached緩存
[root@node1 ~]# vim/usr/share/nginx/html/test.php ###編輯測試頁
<?php
$mem = new Memcache;
$mem->connect("127.0.0.1", 11211) or die("Could not connect");
$version = $mem->getVersion();
echo "Server's version: ".$version."<br/>\n";
$mem->set('hellokey', 'Hello World', 0, 600) or die("Failed tosave data at the memcached server");
echo "Store data in the cache (data will expire in 600seconds)<br/>\n";
$get_result = $mem->get('hellokey');
echo "$get_result is from memcached server.";
?>
如果有輸出“Hello World is from memcached.”等信息,則表明memcache已經能夠正常工作。
查看MemCache服務器的狀態:
命中24次