企业——memcache对PHP页面的缓存加速优化
? ?Memcache 是一個高性能的分布式內存對象緩存系統,用于動態Web應用以減輕數據庫負載。它通過在內存中緩存數據和對象來減少讀取數據庫的次數,從而提高了網站訪問的速度。 MemCaChe是一個存儲鍵值對的HashMap,在內存中對任意的數據(比如字符串、對象等)所使用的key-value存儲,數據可以來自數據庫調用、API調用,或者頁面渲染的結果。MemCache設計理念就是小而強大,它簡單的設計促進了快速部署、易于開發并解決面對大規模的數據緩存的許多難題,而所開放的API使得MemCache能用于Java、C/C++/C#、Perl、Python、PHP、Ruby等大部分流行的程序語言。數據庫是是將數據存放在硬盤中,因此讀取的速度會相對于將數據存儲在內存中的memcache來說慢。
? ?傳統的Web應用都將數據保存到RDBMS中,應用服務器從RDBMS中讀取數據、處理數據并在瀏覽器中顯示。但是隨著數據量增大、訪問的集中、就會出現RDBMS的負擔加重、數據庫響應變慢、導致整個系統響應延遲增加。而memcached就是為了解決這個問題而出現的,memcached是一款高性能的分布式內存緩存服務器,一般目的是為了通過緩存數據庫的查詢命中減少數據庫壓力、提高應用響應速度、提高可擴展性。
?
二.memcache的配置
1.解壓memcache源碼包
tar? zxf? memcache-2.2.5.tgz
?
2.將前邊php編譯完成的二進制命令加入環境變量中,保證可以直接調用php命令
vim ~/.bash_profile
PATH=$PATH:$HOME/bin:/usr/local/lnmp/mysql/bin:/usr/local/lnmp/php/bin
source ~/.bash_profile ##刷新環境變量
?
3.創建一個預編譯環境并進行編譯匯編memcache源碼包
phpize是用來擴展php擴展模塊的,通過phpize可以建立php的外掛模塊,比如你想在原來編譯好的php中加入memcached或者ImageMagick等擴展模塊,可以使用phpize。
phpize工具是在php安裝目錄下,基于這點phpize對應了當時的php環境,所以是要根據該php的配置情況生成對應的configure文件,建立一個configure文件。必須在一個目錄下去運行phpize,那么phpize就知道你的環境是哪個目錄,并且configure文件建立在該目錄下。
cd memcache-2.2.5
phpize
Configuring for:
PHP Api Version: 20131106
Zend Module Api No: 20131226
Zend Extension Api No: 220131226
./configure ##源碼編譯,已經安裝好了php,我們就不用再指定新的php擴展模塊路徑
make && make install
?
4.php的配置文件中添加memcache模塊
cd /usr/local/lnmp/php/etc/
vim php.ini
873 extension=memcache.so # 將873行memcache模塊的注釋打開
/etc/init.d/php-fpm reload
Reload service php-fpm done
php -m ##查看php模塊
php -m | grep memcache ##過濾memcache模塊,發現已經有了這個模塊
memcache
php -m | grep mysql ##同時支持mysql
mysql
mysqli
mysqlnd
pdo_mysql
?
5.安裝memcache工具并啟動memcache
yum install -y memcahce
/etc/init.d/memcached start
netstat -antlp ##查看端口信息 memcache的監聽端口是(11211端口) 如果有端口信息說明工具開啟成功
?
注意:上面顯示的端口信息是,檢測所有11211端口的所有主機,如果想只監控本機則進行以下修改(注意,這里只做介紹,實際只監聽本機是不合理的,此步驟不用做)
vim /etc/sysconfig/memcached
PORT="11211"
USER="memcached"
MAXCONN="1024"
CACHESIZE="64"
OPTIONS="-l 127.0.0.1" ##修改此處,將信息修改為本機的回環接口的IP地址:127.0.0.1
/etc/init.d/memcached restart
Stopping memcached: [ OK ]
Starting memcached: [ OK ]
netstat -atnlp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 127.0.0.1:11211 0.0.0.0:* LISTEN 3855/memcached ##顯示只監聽本機成功
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 1251/nginx
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 910/sshd
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 986/master
tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN 3807/php-fpm
tcp 0 0 :::22 :::* LISTEN 910/sshd
tcp 0 0 ::1:25 :::* LISTEN 986/master
tcp 0 0 :::3306 :::* LISTEN 1210/mysqld
?
6.將測試文件cp到/usr/local/lnmp/nginx/html,設置memcached的密碼
cd memcache-2.2.5
cp memcache.php example.php /usr/local/lnmp/nginx/html/ ##用nginx當做web服務器,將memcache的測試頁面放到相應的發布目錄下面
cd /usr/local/lnmp/nginx/html/
vim memcache.php
22 define('ADMIN_USERNAME','memcache'); ##用戶為memcache
23 define('ADMIN_PASSWORD','westos'); ##設置密碼為westos // Admin Password
28 $MEMCACHE_SERVERS[] = '172.25.79.1:11211';
29 #$MEMCACHE_SERVERS[] = 'mymemcache-server2:11211';?
?
yum install -y telnet ##為什么需要telnet?telnet就是查看某個端口是否可訪問。有時候經常要用的端口是 8080,那么你可以啟動服務器,用telnet 去查看這個端口是否可用。
? telnet?localhost 11211 ##
?
7.?測試:
瀏覽器輸入:172.25.254.1:memcache.php
輸入設置的賬戶和密碼
然后重新打開一個瀏覽器頁面,輸入172.25.254.1:example.php ,不斷刷新
當訪問多次example.php后,查看命中情況會不斷提高,最后將會達到百分之百。 如下圖:
?
8.對頁面進行壓力測試 (加速頁面example.php和沒加速index.php的對比(錯誤率對比,相應時間對比))
(1)訪問 index.php
ab -c 10 -n 5000 http://172.25.254.1/index.php ## ab是性能測試的一個工具,可用于web的并發測試
ab常用參數的介紹:
-n :總共的請求執行數,缺省是1;
-c: 并發數,缺省是1;
-t:測試所進行的總時間,秒為單位,缺省50000s
-p:POST時的數據文件
-w: 以HTML表的格式輸出結果
?
注意:如果沒有ab這個命令,則可以安裝下包:yum install httpd-tools-2.2.15-29.el6_4.x86_64 -y
可以看到所用時間為5s左右,出錯個數為529個:
?
?
(2)訪問 example.php
ab -c 10 -n 5000 http://172.25.254.1/example.php
可以看到所用時間為2s左右,出錯個數為0個,速度提高了,錯誤率大大降低
?
?
?
?
?
轉載于:https://www.cnblogs.com/wf-aiyouwei/p/10679686.html
總結
以上是生活随笔為你收集整理的企业——memcache对PHP页面的缓存加速优化的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java——线程池
- 下一篇: ALICE源代码分析