1. 程式人生 > >超詳細Memcached+LAMP搭建詳解操作命令

超詳細Memcached+LAMP搭建詳解操作命令

安裝位置 第一條 連接 進行 添加數據 des auth 創建 獲取數據

簡介

Memcached是一套高性能內存對象緩存系統,用於一些高負載的Web網站,主要作用是通過緩存數據庫查詢結果,減少數據庫訪問次數,以提高動態Web應用的響應速度、提高可擴展性。Memcached是典型的C/S架構,因此需要安裝服務器端與客戶端。服務器端是用C語言編寫的,客戶端可用任何語言來編寫,如PHP、 Python、Perl等。為了提高性能,Memcached中保存的數據都存儲在memcached內置的內存存儲空間中,讀取速度快。由於數據僅存在於內存中,因此重啟memcached、重啟操作系統會導致全部數據消失。另外,緩存的數據量達到指定值或者過期之後,就基於LRU(Least Recently Used)算法自動刪除不使用的緩存。memcached本身是為緩存而設計的服務器,因此並沒有過多考慮數據的永久性問題

工作原理

技術分享圖片

首先,Web客戶端發出獲取數據的請求到Web服務器的應用程序,應用程序調用Memcache客戶端程序庫接口,連接Memcached服務器,分為兩種情況:
1.如果此時Web客戶端所請求的數據在Memcached中已經緩存,則Memcached將數據返回給Web客戶端,步驟為:1->2->5->6->7->8
2.如果Memcached沒有緩存Web客戶端所請求的數據,則Memcache客戶端程序將請求轉發給數據庫服務器,數據庫服務器將數據返回給Memcache客戶端程序,然後返回給Web客戶端,同時Memcache客戶端程序將數據緩存到Memcached服務器,以備下次有客戶端請求同樣的數據,步驟分別為:1->2->3->4->7->8及4->5

實驗環境

主機名稱 操作系統 IP地址 主要軟件
memcached CentOS_7.4_x86_64 192.168.100.71 libevent-2.1.8-stable;memcached-1.5.6
client CentOS_7.4_x86_64 192.168.100.73 LAMP架構相關軟件

搭建步驟

一、服務器端安裝Memcache

1、安裝libevent

[root@memcached ~]# tar xvfz libevent-2.1.8-stable.tar.gz
[root@memcached ~]# cd libevent-2.1.8-stable/

[root@memcached libevent-2.1.8-stable]# ./configure --prefix=/usr/local/libevent
[root@memcached libevent-2.1.8-stable]# make && make install

2、安裝Memcache

[root@memcached ~]# tar xvfz memcached-1.5.6.tar.gz
[root@memcached ~]# cd memcached-1.5.6/
[root@memcached memcached-1.5.6]# ./configure --prefix=/usr/local/memcached --with-libevent=/usr/local/libevent/
[root@memcached memcached-1.5.6]# make && make install

3、優化路徑

[root@memcached ~]# ln -s /usr/local/memcached/bin/* /usr/local/bin/

4、啟動服務

[root@memcached ~]# memcached -d -m 32M -p 11211 -u root

#解析:
-d: 以守護進程的方式運行memcache
-m: 定義memcache分配的存儲空間
-p: 指定端口號
-u: 指定運行用戶

[root@memcached ~]# netstat -anpt | grep ‘11211‘

技術分享圖片

5、使用telnet進行本地測試

[root@memcached ~]# yum -y install telnet #安裝telnet服務
[root@memcached ~]# telnet localhost 11211 #連接memcache

二、Mencache相關命令

1、Mencache存儲命令

1).add命令[ add命令用於將value(數據值)存儲在指定的key(鍵)中 ]

add new_key 0 900 5     #添加值
hello
STORED    #保存成功,輸出STORED ;ERROR,在保存失敗後輸出。

解析:
new_key   #鍵值 key-value 結構中的 key,用於查找緩存值
0         #可以包括鍵值對的整型參數,客戶機使用它存儲關於鍵值對的額外信息 
900       #在緩存中保存鍵值對的時間長度(以秒為單位,0 表示永遠)
5         #在緩存中存儲的字節數
hello     #存儲的值(始終位於第二行)
delete new_key  #刪除相應的數據
DELETED

2).set命令[ set命令用於將value(數據值)存儲在指定的key(鍵)中。註意如果set的key已經存在,該命令可以更新該key所對應的原來的數據,也就是實現更新的作用 ]

add new_key 0 900 5    #添加數據
hello
STORED
set new_key 0 900 5    #更新數據
word!  
STORED  
get new_key            #查看鍵對應的值,數據已經更新
VALUE new_key 0 5
word!
END
delete new_key         #刪除相應的數據
DELETED

3).replace命令[ replace命令用於替換已存在的key(鍵)的value(數據值)。如果key不存在,則替換失敗 ]

replace username 0 900 3
tom
NOT_STORED  #執行替換失敗後輸出,原因key不存在
add new_key 0 900 16
some_other_value
NOT_STORED  #執行替換失敗後輸出,原因key不存在
STORED
replace new_key 0 900 10  #替換數據
data_value
STORED
get new_key               #查看鍵對應的值,數據已經替換,並且存儲的字節數也已經更改
VALUE new_key 0 10
data_value
END
delete new_key            #刪除相應的數據
DELETED

4).append命令[ append命令用於向已存在key(鍵)的value(數據值)後面追加數據 ]

set runoob 0 900 9      #添加一條數據
memcached
STORED
append runoob 0 900 6   #對於鍵"runoob"追加了6個字節格式,並且添加字符串"&redis"
&redis
STORED
get runoob              #查詢此數據
memcached&redis
END
delete runoob           #刪除相應的數據
DELETED

5).prepend命令[ prepend命令用於向已存在key(鍵)的value(數據值)前面追加數據 ]

set runoob 0 900 9        #添加數據
memcached
STORED
prepend runoob 0 900 6    #在"runoob "鍵對應的值前面追加"redis&"
redis&
STORED
get runoob                #查詢數據
VALUE runoob 0 15
redis&memcached
delete runoob             #刪除相應的數據
DELETED

6).CAS命令[ CAS命令用於執行一個"檢查並設置"的操作,它僅在當前客戶端最後一次取值後,該key 對應的值沒有被其他客戶端修改的情況下, 才能夠將值寫入。檢查是通過cas_token參數進行的, 這個參數是Memcach指定給已經存在的元素的一個唯一的64位值 ]

cas tp 0 900 9
ERROR            #缺少token
cas tp 0 900 9 2    
memcached
NOT_FOUND           #鍵tp不存在
set tp 0 900 9             #添加數據
memcached
STORED
gets tp             #獲取唯一令×××信息    
VALUE tp 0 9 12     #令×××值為12
memcached
END
cas tp 0 900 5 12   #檢查令×××值為"12",設置值
redis
STORED              
#註意輸出信息
STORED:   保存成功後輸出
ERROR:    保存出錯或語法錯誤
EXISTS:   在最後一次取值後另外一個用戶也在更新該數據
NOT_FOUND:服務上不存在該鍵值
get tp              #再次查詢數據
VALUE tp 0 5
redis
END

2、Mencache查找命令

1).get命令[ get命令獲取存儲在key(鍵)中的value(數據值),如果key不存在,則返回空 ]

set runoob 0 900 9  #添加一條數據
memcached
STORED 
get runoob          #查找鍵對應的值
VALUE runoob 0 9
memcached
END
delete runoob       #刪除相應的數據
DELETED

2). gets命令[ gets命令獲取帶有CAS令×××存的value(數據值),如果key不存在,則返回空 ]

set runoob 0 900 9      #添加第一條數據
memcached
STORED
set test 0 900 5        #添加第二條數據
redis
STORED
gets runoob test        #查詢數據
VALUE runoob 0 9 15     #"15"代表"runoob"鍵對應唯一令×××值
memcached
VALUE test 0 5 16       #"16"代表"test"鍵對應唯一令×××值
redis
END
delete runoob       #刪除相應的數據
delete test      

3).delete命令[ delete命令用於刪除已存在的key(鍵) ]

之前操作已經演示,略……

4).incr與decr命令[ incr與decr命令用於對已存在的 key(鍵) 的數字值進行自增或自減操作;incr與decr命令操作的數據必須是十進制的32位無符號整數 ]

set visitors 0 900 2    #添加一條數據
10
STORED
decr visitors 6               #將"visitors"鍵對應的值減去6 
4
get visitors                      #減去6之後查看,結果為4
VALUE visitors 0 2
4 
END
delete visitors      #刪除相應數據
DELETED

3、Mencache統計命令

1).stats命令[ stats命令用於返回統計信息例如 PID(進程號)、版本號、連接數等 ]

stats
STAT pid 17274                    #memcache服務器進程ID
STAT uptime 17517                 #服務器已運行秒數
STAT time 1537471499              #服務器當前時間戳
STAT version 1.5.6                #服務版本
STAT pointer_size 64              #操作系統指針大小
STAT rusage_user 2.775518         #進程累計用戶時間
STAT rusage_system 1.189507       #進程累計系統時間
STAT max_connections 1024         #最大連接數
STAT curr_connections 2           #當前連接數量
STAT total_connections 14         #服務運行以來連接總數
STAT connection_structures 4      #服務分配的連接結構數量
STAT cmd_get 26                   #get命令請求次數
STAT cmd_set 27                   #set命令請求次數          
STAT cmd_flush 0                  #flush命令請求次數                            
STAT get_hits 17                  #get命令命中次數                                  
STAT get_misses 9                 #get命令未命中次數                 
STAT delete_misses 0              #delete命令未命中次數              
STAT delete_hits 8                #delete命令命中次數               
STAT incr_misses 0                #incr命令未命中次數               
STAT incr_hits 0                  #incr命令命中次數               
STAT decr_misses 0                #decr命令未命中次數             
STAT decr_hits 1                  #decr命令命中次數                
STAT cas_misses 1                 #cas命令未命中次數               
STAT cas_hits 0                   #cas命令命中次數                
STAT cas_badval 6                 #使用擦拭次數                               
STAT auth_cmds 0                  #認證命令處理的次數               
STAT auth_errors 0                #認證失敗數目           
STAT bytes_read 1415              #讀取總字節數
STAT bytes_written 1110           #發送總字節數
STAT limit_maxbytes 33554432      #分配的內存總大小(字節)                
STAT accepting_conns 1            #服務器是否達到過最大連接(0/1)
STAT listen_disabled_num 0        #失效的監聽數
STAT threads 4                    #當前線程數
STAT conn_yields 0                #連接操作主動放棄數目
STAT hash_power_level 16          #當前存儲占用的字節數
STAT curr_items 0                 #當前存儲的數據總數
STAT total_items 19               #啟動以來存儲的數據總數
STAT evictions 0                  #LRU釋放的對象數目
STAT reclaimed 6                  #已過期的數據條目來存儲新數據的數目

2).stats items命令[ stats items命令用於顯示各個slab中item的數目和存儲時長(最後一次訪問距離現在的秒數) ]

set runoob 0 900 9      #添加一條數據
memcached
STORED
stats items             #查看
STAT items:1:number 1
STAT items:1:number_hot 0
STAT items:1:number_warm 0
STAT items:1:number_cold 1
STAT items:1:age_hot 0
STAT items:1:age_warm 0
STAT items:1:age 6
STAT items:1:evicted 0
STAT items:1:evicted_nonzero 0
……
delete runoob          #刪除相應數據
DELETED

3).stats slabs命令[ stats slabs命令用於顯示各個slab的信息,包括chunk的大小、數目、使用情況等 ]

stats slabs
STAT 1:chunk_size 96
STAT 1:chunks_per_page 10922
STAT 1:total_pages 1
STAT 1:total_chunks 10922
STAT 1:used_chunks 1
STAT 1:free_chunks 10921
STAT 1:free_chunks_end 0
STAT 1:mem_requested 74
STAT 1:get_hits 17
STAT 1:cmd_set 28
STAT 1:delete_hits 8
……

4).stats sizes命令[ stats sizes命令用於顯示所有item的大小和個數 ]

stats sizes
STAT 96 1   #item大小及個數

5).flush_all命令[ flush_all命令用於清理緩存中的所有鍵值對。該命令提供了一個可選參數time,用於在制定的時間後執行清理緩存操作 ]

set runoob 0 900 9  #添加一條數據
memcached
STORED
get runoob          #查詢數據
VALUE runoob 0 9
memcached
END
flush_all           #清除緩存中所有鍵值對         
OK
get runoob          #查詢為空直接
END

三、客戶端安裝LAMP架構

1、安裝httpd

1).解壓相關源碼包

[root@client ~]# tar xvfz apr-1.6.2.tar.gz
[root@client ~]# tar xvfz apr-util-1.6.0.tar.gz
[root@client ~]# tar xvfj httpd-2.4.29.tar.bz2
[root@client ~]# mv apr-1.6.2 httpd-2.4.29/srclib/apr
[root@client ~]# mv apr-util-1.6.0 httpd-2.4.29/srclib/apr-util/

2).安裝相關依賴包

[root@client ~]# yum -y install \
gcc \
gcc-c++ \
make \
pcre-devel \
expat-devel \
perl

3).安裝httpd服務

[root@client ~]# cd httpd-2.4.29/
[root@client httpd-2.4.29]# ./configure --prefix=/usr/local/httpd --enable-so --enable-rewrite --enable-charset-lite --enable-cgi
[root@client httpd-2.4.29]# make && make install

4).編輯主配置文件

[root@client ~]# vim /usr/local/httpd/conf/httpd.conf

ServerName www.bt.com:80      #編輯完全主機名
Listen 192.168.100.73:80             #編輯監聽地址

5).添加系統服務

[root@client ~]# cp /usr/local/httpd/bin/apachectl /etc/init.d/httpd #新建啟動腳本
[root@client ~]# vim /etc/init.d/httpd #編輯啟動腳本

#  在第2行開始插入以下兩行
# chkconfig: 35 85 21                   #35級別自動運行  第85個啟動 第21個關閉
# description: Apache is a World Wide Web server        #描述信息    

[root@client ~]# chkconfig --add httpd #添加系統服務

6).優化路徑

[root@client ~]# ln -s /usr/local/httpd/conf/httpd.conf /etc/ #優化配置文件路徑
[root@client ~]# ln -s /usr/local/httpd/bin/* /usr/local/bin/ #優化執行可執行命令路徑

7).啟動服務

[root@client ~]# systemctl daemon-reload #當添加新服務使用
[root@client ~]# systemctl start httpd.service
[root@client ~]# netstat -anpt | grep ‘:80‘
技術分享圖片

2、安裝Mysql

1).安裝相關工具包

[root@client ~]# yum -y install ncurses-devel autoconf cmake

2).安裝mysql

[root@client ~]# tar xzvf mysql-5.6.26.tar.gz #解壓
[root@client ~]# cd mysql-5.6.26
[root@client mysql-5.6.26]# cmake \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DEXTRA_CHARSETS=all \
-DSYSCONFIDIR=/etc \
-DMYSQL_DATADIR=/home/mysql/

解析:
DCMAKE_INSTALL_PREFIX:mysql軟件安裝位置
DDEFAULT_CHARSET:默認字符集                            
DDEFAULT_COLLATION:默認字符校驗
DWITH_EXTRA_CHARSETS:額外的編碼,請使用ALL來編譯                     
DMYSQL_DATADIR:數據目錄                          
DMYSQL_DATADIR:配置文件路徑

[root@client mysql-5.6.26]# make && make install #編譯及編譯安裝

3).新建配置文件

[root@client ~]# cd /usr/local/mysql/
[root@client mysql]# cp support-files/my-default.cnf /etc/my.cnf

4).添加系統服務

[root@client mysql]# cp support-files/mysql.server /etc/init.d/mysqld #新建啟動腳本
[root@client ~]# chmod 755 /etc/init.d/mysqld #修改文件權限
[root@client ~]# chkconfig --add /etc/init.d/mysqld #添加系統服務
[root@client ~]# chkconfig mysqld on #設置開機自啟動

5).編輯系統環境變量

[root@client ~]# echo "PATH=$PATH:/usr/local/mysql/bin" >> /etc/profile #編輯系統環境變量
[root@client ~]# source /etc/profile #重新讀取系統環境變量配置文件
[root@client ~]# echo $PATH

6).添加mysql進程用戶

[root@client ~]# useradd -s /sbin/nologin mysql
[root@client ~]# chown -R mysql:mysql /usr/local/mysql/

7).初始化服務

[root@client ~]# /usr/local/mysql/scripts/mysql_install_db \
--user=mysql \
--ldata=/var/lib/mysql \
--basedir=/usr/local/mysql \
--datadir=/home/mysql

解析:
user:指定數據庫管理員
basedir:指定mysql軟件安裝位置
datadir:指定mysql數據安裝位置

8).編輯啟動腳本

[root@client ~]# vim /etc/init.d/mysqld

basedir=/usr/local/mysql     #約第46行,指定數據庫安裝目錄
datadir=/home/mysql          #約第47行,指定數據存放目錄

9).啟動服務

[root@client ~]# systemctl daemon-reload
[root@client ~]# systemctl start httpd.service
[root@client ~]# netstat -anpt | grep ‘:3306‘
技術分享圖片

10).初始化密碼

[root@client ~]# mysqladmin -u root password "123"
技術分享圖片

3、安裝php

1).安裝相關依賴包

[root@client ~]# yum -y install \
gd \
libpng \
libpng-devel \
pcre \
pcre-devel \
libxml2-devel \
libjpeg-devel

2).安裝php

[root@client ~]# tar xjvf php-5.6.11.tar.bz2
[root@client ~]# cd php-5.6.11
[root@client php-5.6.11]# ./configure \
--prefix=/usr/local/php5 \
--with-gd \
--with-zlib \
--with-apxs2=/usr/local/httpd/bin/apxs \
--with-mysql=/usr/local/mysql \
--with-config-file-path=/usr/local/php5 \
--enable-mbstring

[root@client php-5.6.11]# make && make install

3).新建配置文件

[root@client php-5.6.11]# cp php.ini-development /usr/local/php5/php.ini

4).優化路徑

[root@client ~]# ln -s /usr/local/php5/bin/ /usr/local/bin/
[root@client ~]# ln -s /usr/local/php5/sbin/
/usr/local/sbin/

5).編輯httpd服務配置文件

[root@client ~]# vim /etc/httpd.conf

LoadModule php5_module        modules/libphp5.so   #約156行,檢查此語句是否存在,如果不存在還需要重新安裝mysql,如果還沒有,直接重裝apache

<IfModule dir_module>   #約255行
   DirectoryIndex index.php index.html   #添加index.php默認首頁識別
</IfModule>

<IfModule mime_module>  #約370行標簽內,添加以下兩行,支持PHP後綴
   AddType application/x-httpd-php .php
   AddType application/x-httpd-php-source .phps
……

6).重啟服務

[root@client ~]# systemctl restart httpd.service

4、測試

1).測試PHP網頁能否正常顯示

[root@client ~]# cd /usr/local/httpd/htdocs/ #進入站點
[root@client htdocs]# vim test1.php

<?php
phpinfo();
?>

技術分享圖片

2).測試PHP網頁能訪問MySQL服務器

[root@client ~]# mysql -u root -p123
[root@client ~]# cd /usr/local/httpd/htdocs/
[root@client htdocs]# vim test2.php

<?php
$link=mysql_connect(‘192.168.100.73‘,‘root‘,‘123‘);
if($link) echo "<h1>Welcome to MySQL</h1>";
else echo "Fail!!";
mysql_close();
?>

技術分享圖片

四、客戶端安裝Memcached

1、解壓Memcache

[root@client ~]# tar xzvf memcache-2.2.7.tgz

2、用phpize命令將Memcache添加為PHP的一個模塊

[root@client ~]# yum -y install autoconf #安裝依賴包

[root@client ~]# cd memcache-2.2.7/
[root@localhost memcache-2.2.7]# /usr/local/php5/bin/phpize

3、安裝Memcached

[root@localhost memcache-2.2.7]# ./configure --enable-memcache --with-php-config=/usr/local/php5/bin/php-config
[root@localhost memcache-2.2.7]# make && make install
Installing shared extensions: /usr/local/php5/lib/php/extensions/no-debug-zts-20131226/ #安裝完成之後,會出現共享組件的位置
技術分享圖片

4、編輯php主配置文件

[root@client ~]# vim /usr/local/php5/php.ini

extension_dir = "/usr/local/php5/lib/php/extensions/no-debug-zts-20131226/" #734行,添加共享路徑
extension = memcache.so                                                     #添加一行,將memcache模塊添加進去

5、編寫PHP測試代碼調用Memcache程序接口來測試Memcached服務器與客戶端協同工作是否正常

[root@client ~]# cd /usr/local/httpd/htdocs/ #進入站點
[root@client htdocs]# vim test3.php

<?php
$memcache = new Memcache();                      #創建memcache實例
$memcache->connect(‘192.168.100.71‘,11211);      #連接memcache服務器
$memcache->set(‘name‘,‘hello world‘,0,60);       #添加一條鍵值對數據
$result = $memcache->get(‘name‘);                #通過key獲取相應的value值
unset($memcahe);                                 #銷毀實例         
echo $result;
?>

[root@client htdocs]# systemctl restart httpd.service #重啟web服務

技術分享圖片

超詳細Memcached+LAMP搭建詳解操作命令