LNMP架構—MemCache對php頁面的緩存加速優化
文章目錄
1.什麼是MemCache?
- memcache是一個高性能的分佈式的內存對象緩存系統,用於動態Web應用以減輕數據庫負擔。
- memcache通過在內存裏維護一個統一的巨大的hash表,來存儲經常被讀寫的一些數組與文件,從而極大的提高網站的運行效率。
- memcache是一種內存緩存技術,是一種緩存手段,要看情況來使用。
- 對於頻繁讀取,每次讀取重複率高,數據更新頻度低的數據,用memcache可以優化你的系統響應速度。
Memcache和memcached的區別:
Memcache是這個項目的名稱,而memcached是它服務器端的主程序文件名。
2.MemCache的工作流程
- 檢查客戶端的請求數據是否在memcached中,如有,直接把請求數據返回,不再對數據庫進行任何操作
- 如果請求的數據不在memcached中,就去查數據庫,把從數據庫中獲取的數據返回給客戶端,同時把數據緩存一份到memcached中(memcached客戶端不負責,需要程序明確實現)
- 每次更新數據庫的同時更新memcached中的數據,保證一致性。
- 當分配給memcached內存空間用完之後,會使用LRU(Least Recently Used,最近最少使用)策略加上到期失效策略,失效數據首先被替換,然後再替換掉最近未使用的數據。
3.爲什麼要使用Memcache ?
主要用於動態Web應用以減輕數據庫的負載。它通過在內存中緩存數據和對象來減少讀取數據庫的次數,從而提高了網站訪問的速度
memcache使用場景:
-
訪問頻繁的字典數據
-
大量的hot數據
-
頁面緩存
-
頻繁的查詢條件和結果
-
臨時處理的數據
4.MemCache對php頁面的緩存加速優化
step1 解壓memcache源碼包:
tar zxf memcache-4.0.5.2.tgz
step2 將php編譯完成的二進制命令加入環境變量中:
cd memcache-4.0.5.2
phpize
vim ~/.bash_profile
寫入:
11 PATH=$PATH:$HOME/bin:/usr/local/lnmp/mysql/bin:/usr/local/lnmp/php/bin
source ~/.bash_profile
phpize
yum install autoconf -y #安裝需要的軟件
phpize
phpize是用來擴展php擴展模塊的,通過phpize可以建立php的外掛模塊,比如你想在原來編譯好的php中加入memcached或者ImageMagick等擴展模塊,可以使用phpize。
phpize工具是在php安裝目錄下,基於這點phpize對應了當時的php環境,所以是要根據該php的配置情況生成對應的configure文件,建立一個configure文件。必須在一個目錄下去運行phpize,那麼phpize就知道你的的環境是哪個目錄,並且configure文件建立在該目錄下。
step3 編譯安裝memcache源碼包:
./configure --with-php-config=/usr/local/lnmp/php/bin/php-config
make && make install #安裝完成後最後一行會有一個路徑,複製下來
step4 在php的配置文件中添加memcache模塊:
cd /usr/local/lnmp/php/etc/
ls
vim php.ini
寫入:
759 extension_dir = "/usr/local/lnmp/php/lib/php/extensions/no-debug-non-zts-20190902/"
913 extension=memcache.so
/etc/init.d/php-fpm reload #重新加載php
php -m | grep memcache #過濾memcache模塊,發現已經有了這個模塊
php -m | grep mysql #同時支持mysql
step5 安裝memcache工具並啓動memcache:
yum install memcached -y
cat /etc/sysconfig/memcached
systemctl start memcached
step6 安裝telnet:
telnet
yum install telnet -y
telnet
telnet localhost 11211
step7 將測試文件複製到nginx的默認發佈頁面,設置memcached的密碼:
cd memcache-4.0.5.2
cp memcache.php example.php /usr/local/lnmp/nginx/html/
cd /usr/local/lnmp/nginx/html/
ls
vim memcache.php
修改:
22 define('ADMIN_USERNAME','memcache'); // Admin Username
23 define('ADMIN_PASSWORD','westos'); // Admin Password
28 $MEMCACHE_SERVERS[] = '172.25.254.1:11211'; // add more as an array
29 #$MEMCACHE_SERVERS[] = 'mymemcache-server2:11211'; // add more as an array
step8 測試:
訪問172.25.254.1:/memcache.php #該頁面顯示了訪問命中率
(先不要關閉該頁面)
壓力測試:加速頁面example.php和沒加速index.php的對比(錯誤率對比,相應時間對比)
ab -c 10 -n 5000 http://172.25.254.1/index.php
ab -c 10 -n 5000 http://172.25.254.1/example.php
刷新剛纔的頁面,發現命中率達到100%