【Memcache】Linux和Windows下Memcache服務端和客戶端(PHP)的安裝【原創】

目錄

參考

一、概要

二、服務端

1. Linux 安裝

2. Windows 安裝

三、客戶端-PHP

1. Linux 安裝

2. Windows 安裝

3. PHP測試Memcached


參考

《PHP核心技術與最佳實踐》的第9章:Memcached使用與實踐

Memcached官網

Memcached的Github地址

在 Windows 10 64 下安裝 Memcached,安裝 PHP 7.0.22 的 Memcache 擴展

PHP5的Memcache擴展下載地址

PHP7的Windows的memcache擴展Github地址

 

一、概要

隨着互聯網的發展,特別是Web網站的興起,傳統的關係型數據庫(MySQL、Oracle等)開始出現瓶頸,很多方面不能滿足我們的要求。

比如:

  • 對數據庫的高併發讀寫:關係型數據庫在處理過程非常複雜和耗時(如解析SQL語句、事務處理等),如果對關係型數據庫進行高併發讀寫(每秒上萬次的訪問),那麼關係型數據庫是無法承受的
  • 對海量數據的處理:對於一些高流量網站來說,每天有上千萬的數據產生(如微博),對於關係型數據庫,如果在一個有上億條數據的數據表中查找某條記錄,效率會很低

 

對於這種情況,如果是使用Redis或者是Memcached就能很好的解決以上問題。

這裏對Redis不做討論,只討論Memcache。

Memcache 是一款開源、高性能、分佈式內存對象緩存系統,可應用各種需要緩存的場景,其主要目的是通過降低對Database的訪問來加速web應用程序。

Memcache 把從數據庫中讀取到的數據暫存在內存中,等下次訪問同樣數據時,直接從Memcache中讀取。因爲Memcache中的數據存放在內存中,所以訪問速度特別快,但重要數據最好保存在數據庫或硬盤上,防止斷電後Memcache數據丟失。

 

通俗的理解呢,Memcache其實是隻有一張表的數據庫,數據庫只有兩個字段,一個是key主鍵,一個是value值

 

Memcache分爲服務端和客戶端

 

二、服務端

Memcache 服務端有兩個,一個是 Memcache 另一個是 Memcached ,後者比前者要新,功能也比較多,另外Memcache已經停止更新了,所以一般都是用Memcached作爲服務端的

 

Memcached 是高性能的分佈式內存緩存服務器。 一般的使用目的是,通過緩存數據庫查詢結果,減少數據庫訪問次數,以提高動態Web應用的速度、 提高可擴展性。具有以下特點:

  • 協議簡單:Memcached的服務器客戶端通信並不使用複雜的XML等格式,而是使用簡單的基於文本的協議
  • 基於libevent的事件處理:libevent是個程序庫,將Linux的epoll、BSD類操作系統的kueue等時間處理封裝成統一的接口。Memcached使用這個libevent庫,因此在Linxu、BSD、Solaris等操作系統上發揮其高性能
  • 內置內存存儲方式:爲了提高性能,Memcached中保存的數據都存儲在內置的內存存儲空間中。由於數據僅存在內存中,因此重啓操作系統會導致全部數據消失。另外,內容容量達到指定的值之後Memcached會自動刪除不使用的緩存
  • Memcached不互相通信的分佈式:Memcached儘管是分佈式緩存服務器,但服務端並沒有分佈式功能,各個Memcached不會互相通信以共享信息,它的分佈式主要是通過客戶端來實現的

 

如圖:

 

Memcached 以守護進程的方式運行於一個或多個服務器中,隨時接受來自客戶端的連接操作,客戶端可以由各種語言編寫,如Perl、PHP、Python、Ruby、Java、C等。客戶端在與Memcached服務建立連接之後,接下來的事情就是存取對象了。每個被存儲的對象都有一個唯一標識符key與之相關聯,通過key可以對對象進行存取操作。保存在Memcached的對象實際上是放置在內存中,這也是Memcached如此高效快速的原因了。

 

官網地址:https://memcached.org

Github地址:https://github.com/memcached/memcached/

 

截至目前爲止(2019-10-26),Memcached的最新穩定版本爲:1.5.19

 

注意:Windows版本沒有官方支持,但還是可以使用其他方法進行下載安裝的

 

1. Linux 安裝

這裏以Centos7作爲例子

 

A. 安裝libevent-dev

由於Memcached 依賴於 libevent庫,所以必須先安裝 libevent-dev

yum -y install libevent-devel

 

B. 安裝Memcached

安裝Memcached有兩種方式:

  • 編譯安裝
  • 使用依賴管理工具yum、apt-get等(推薦)

 

編譯安裝:

# 下載memcached(可以通過官方下載地址查看最新穩定版本鏈接:https://memcached.org/downloads)
wget https://memcached.org/files/memcached-1.5.19.tar.gz

# 解壓縮
tar -zxvf memcached-1.5.19.tar.gz

# 編譯安裝
cd memcached-1.5.19
./configure --prefix=/usr/local/memcached
make && make install

編譯的時候,如果不指定安裝位置的話,默認是安裝在/usr/local/bin下面的,這裏修改安裝位置爲:/usr/local/memcached

 

注意:如果是編譯安裝的話,建議是安裝完成之後使用systemctl來管理Memcached服務:

新增Memcached服務

vim /usr/lib/systemd/system/memcached.service :

[Unit]
Description=Memcached
Before=httpd.service
After=network.target

[Service]
Type=simple
ExecStart=/usr/local/memcached/bin/memcached -u root -p 11211 -m 128 -c 100

[Install]
WantedBy=multi-user.target

然後就可以使用systemctl來進行memcached的管理了

# 啓動memcached
systemctl start memcached

# 設置開機啓動
systemctl enable memcached

# 查看狀態
systemctl status memcached

# 重啓服務
systemctl restart memcached

# 停止服務
systemctl stop memcached

 

如果不使用systemctl的話,那麼可以使用以下命令來啓動:

/usr/local/memcached/bin/memcached -d -m 128 -u root -p 11211 -l 127.0.0.1

常用啓動選項:

  • -d:以守護線程方式運行
  • -l:設置監聽的IP地址,如果是本機的話一般不用設置
  • -p:設置監聽的端口號,默認爲11211
  • -m:設置使用的內存大小,以M爲單位
  • -u:指定用戶
  • -c:設置最大併發連接數,默認是11211
  • -vv:打印客戶端的請求和返回信息,一般用來調試

更多命令可以通過 -h 來查找

 

yum安裝:

yum install -y memcached

注意:yum安裝完成之後,默認是會使用systemctl來管理memcached服務的

 

C. 驗證是否安裝成功

# 驗證是否安裝成功
memcached -h

# 查找安裝位置(yum安裝方式)
rpm -ql memcached

 

D. 配置文件

注意:只有yum依賴安裝的纔會生成配置文件,編譯安裝的話是沒有該配置文件的

默認的Memcached配置文件位於:/etc/sysconfig/memcached

PORT="11211"
USER="memcached"
MAXCONN="1024"  
CACHESIZE="64"
OPTIONS=""

參數說明:

**PORT**:Memcached 使用的默認端口。
**USER**:Memcached 的運行用戶。
**MAXCONN**:允許連接到 Memcached 的最大數目。可以根據你的需求增加任何數量。
**CACHESIZE**:內存的緩存大小。
**OPTIONS**:命令的後續參數

一般不需要修改

 

E. 開機啓動和啓動

# 設置開機啓動
systemctl enable memcached

# 啓動(systemctl啓動)
systemctl start memcached

# 手動啓動
/usr/local/memcached/bin/memcached -d -m 128 -u root -p 11211 -l 127.0.0.1

驗證是否運行:

netstat -tulpn | grep 11211
# 或者
memcached-tool 127.0.0.1 stats

 

F. Telnet連接

可以通過telnet連接memcached服務器進行數據存儲,及數據獲取

一些簡單的操作:

# 查看版本
version

# 設置”key”, <command name> <key> <flags> <exptime> <bytes>
set test 0 0 5

# 輸入“value”值,<data block>,字節數與key中的設的“bytes”相同
mymem

# 獲取已設的key的數據
get test

# 推出
quit

比如:

[root@www abc]# telnet 127.0.0.1 11211
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
version
VERSION 1.4.15
set test 0 0  5
mymem
STORED
get test
VALUE test 0 5
mymem
END
quit
Connection closed by foreign host.

 

2. Windows 安裝

Windows版本沒有官方支持,但還是有方法

參考:

http://www.shuijingwanwq.com/2017/09/11/1906/

https://www.runoob.com/Memcached/window-install-memcached.html

 

Github地址:https://github.com/nono303/memcached

在裏面下載對應版本的memcached即可

截至目前爲止,Windows下的memcached的版本爲:1.5.19

 

下載完成之後,在在memcached的目錄下的命令行下運行:

memcached.exe -p 11211 -m 150 -u root

命令等同於Linux的命令

 

注意:在memcached 1.4.5版本之前是可以作爲服務安裝的,即會開啓自啓動,直接使用管理員權限在memcached的目錄下運行:

memcached.exe -d install

然後就可以使用命令來開啓和關閉:

memcached.exe -d start
memcached.exe -d stop

但是在1.4.5以及後面的版本就不行了,需要使用任務計劃中開啓一個普通的進程,在Window啓動時設置memcached自動執行。

具體可以參考http://www.shuijingwanwq.com/2017/09/11/1906/

 

三、客戶端-PHP

Memcache支持多客戶端,如perl,php,Python,c/c++,Java等等,這裏主要基於php來進行配置。

 

關於PHP的memcache擴展有兩個:

  • memcache
  • memcached(推薦)

 

1. memcache

下載地址:https://pecl.php.net/package/memcache

官方已經停止更新了,最新穩定版本是在2013-04-07發佈的3.0.8版本,並且提供了Windows的擴展下載,但只支持到PHP 5.6,不支持PHP7+版本

 

2. memcached

這個擴展相比起memcache來說,支持的函數和協議比memcache多,版本也比較新,並且一直在維護中,功能更加強大,另外呢,memcache這個擴展在分佈式讀取數據和高併發下的穩定性上都存在一些問題,所以更加推薦使用memcached來作爲PHP的擴展

 

下載地址:https://pecl.php.net/package/memcached

Githug地址:https://github.com/php-memcached-dev/php-memcached

 

最新穩定版本爲2019-10-06發佈的3.1.4版本

 

注意:3.x是支持PHP 7.0 - 7.4,2.x是支持PHP 5.2 - 5.6

 

注意:memcached並不支持Windows平臺,如果Windows的PHP想要安裝memcache擴展的話,只能安裝memcache,如果是PHP 5.6及以下版本的話,去官方下載地址下載即可:https://pecl.php.net/package/memcache,如果是PHP 7的版本的話,需要從這裏下載:https://github.com/nono303/PHP7-memcache-dll,這是非官方提供的包,是基於memcache的

 

1. Linux 安裝

A. 安裝libmemcached

php的memcached擴展是基於libmemcached,所以要先安裝libmemcached

目前是1.0.18版本,最新的穩定版本可以查看官網:https://launchpad.net/libmemcached/+download

# 下載libmemcached(可以去官方下載地址看看最新穩定版本:https://launchpad.net/libmemcached/+download)
wget https://launchpad.net/libmemcached/1.0/1.0.18/+download/libmemcached-1.0.18.tar.gz

# 解壓
tar -zxvf libmemcached-1.0.18.tar.gz

# 配置安裝目錄
cd libmemcached-1.0.18/
./configure --prefix=/usr/lib/libmemcached

# 編譯安裝
make && make install

 

B. 安裝memcached

目前的最新穩定版本是3.1.4版本,最新的穩定版本可以查看官網:https://pecl.php.net/package/memcached

# 下載php-memcached(可以去官方下載地址看看最新穩定版本:https://pecl.php.net/package/memcached)
wget https://pecl.php.net/get/memcached-3.1.4.tgz

# 解壓
tar zxvf memcached-3.1.4.tgz
cd memcached-3.1.4

#使用phpize來生成configure配置文件
/usr/bin/phpize(可以通過find / -name "phpize"找到自己的phpize路徑,如果沒有安裝phpize的話需要安裝yum install -y php-devel)

# 配置
./configure --enable-memcached --with-php-config=/usr/bin/php-config --with-libmemcached-dir=/usr/lib/libmemcached --disable-memcached-sasl

# 編譯安裝
make && make install

 

C. PHP添加擴展

vim /etc/php.ini

# 增加
extension=memcached.so

 

D. 重啓Apache或者是Nginx

# apache
systemctl restart httpd 

# nginx
systemctl restart nginx 

 

E. 驗證

php -m | grep memcached

也可以通過訪問phinfo頁面來驗證是否成功

 

2. Windows 安裝

注意:Memcached擴展並不支持Windows平臺,如果Windows的PHP想要安裝memcache擴展的話,只能安裝memcache,如果是PHP 5.6及以下版本的話,去官方下載地址下載即可:https://pecl.php.net/package/memcache,如果是PHP 7的版本的話,需要從這裏下載:https://github.com/nono303/PHP7-memcache-dll,這是非官方提供的包,是基於memcache的

 

下載

PHP 5.6下載地址:https://pecl.php.net/package/memcache

PHP 7 下載地址:https://github.com/nono303/PHP7-memcache-dll

 

根據PHP版本選擇對應的dll,然後放到php的安裝目錄下的ext目錄中

 

設置php.ini

php.ini中增加:

[memcache]
extension = php_memcache.dll

 

重啓Apache或者是Nginx

 

驗證

php -m | grep memcached

也可以通過訪問phinfo頁面來驗證是否成功

注意:這裏是memcache不是memcached

 

3. PHP測試Memcached

vim /var/www/html/test.php

<?php

$mem = new Memcached();
if(!$mem->addServer('127.0.0.1', 11211)){
    die('連接失敗!');
}

$mem->set('name','lf');
var_dump($mem->get('name'));

保存之後,瀏覽器訪問,能看到輸出了if,然後註釋掉$mem->set('name','lf');再去訪問,看看能不能輸出if,如果ok則正常

也可以telnet進去看:

 

可以看到,是有name的值的,說明是正常的

[root@www php-fpm]# telnet 127.0.0.1 11211
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
get name
VALUE name 0 2
lf
END

注意:如果是Windows下的話,是沒有Memcached類的,需要安裝memcache擴展,使用:Memcache類,即改成:

<?php
 
$mem = new Memcache;
if (!$mem->connect('127.0.0.1', 11211)) {
    die('連接失敗!');
}
$mem->set('name','lf');
var_dump($mem->get('name'));

所以在封裝PHP的Memcache類的時候,特別要注意這一點,另外Memcached的方法基本包含了Memcache的方法,可以兼容

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章