1. 程式人生 > >【提供源碼包】高性能存儲對象緩存 之【Memcached】

【提供源碼包】高性能存儲對象緩存 之【Memcached】

軟連接 丟失 參數 tst RoCE 內存 顯示 phpize 以及

目錄簡介:

1· Memcached 功能
2· Memcached 特征
3· Memcached 儲存方式
4· 實戰部署 與 Memcached 連接
5· 文章總結


Memcached 介紹


1)Memcached 是什麽?

1· memcached是一套分布式的快取系統,與redis相似,當初是Danga Interactive為了LiveJournal所發展的,但被許多軟件(如MediaWiki)所使用。這是一套開放源代碼軟件,以BSD license授權協議發布。


2·memcached缺乏認證以及安全管制,這代表應該將memcached服務器放置在防火墻後


3·memcached是高性能的分布式內存緩存服務器

。一般的使用目的是,通過緩存數據庫查詢結果,減少數據庫訪問次數,以提高動態Web應用的速度、提高可擴展性。


4·Memcached 的守護進程(daemon )是用C語言寫的,但是客戶端可以用任何語言來編寫,並通過memcached協議與守護進程通信。但是它並不提供冗余(例如,復制其hashmap條目);當某個服務器S停止運行或崩潰了,所有存放在S上的鍵/值對都將丟失。


2)Memcached 的特征:

memcached作為高速運行的分布式緩存服務器,具有以下的特點:

  • > · 協議簡單
  • > · 基於libevent的事件處理
  • > · 內置內存存儲方式
  • > · memcached不互相通信的分布式

3)Memcached 存儲方式 :

為了提高性能,memcached中保存的數據都存儲在memcached內置的內存存儲空間中。由於數據僅存在於內存中,因此重啟memcached、重啟操作系統會導致全部數據消失。另外,內容容量達到指定值之後,就基於LRU(Least Recently Used)算法自動刪除不使用的緩存。memcached本身是為緩存而設計的服務器,因此並沒有過多考慮數據的永久性問題。


4)請求拓撲圖:

技術分享圖片


5)Memcached 分布式:

(1)Memcached 分布式主要依賴 Memcached 的客戶端來實現,多個Memcached 客戶端服務器是獨立的。分布式數據怎麽楊來存儲是由路由算法決定。


(2)當數據到達客戶端程序庫時,客戶端的算法就依據路由算法來決定保存的 Memcached 服務器。讀取數據時,客戶端依據保存數據的路由算法選擇和儲存數據時相同的服務器來讀取數據。


(3)下圖是分布Memcached 分布式:

技術分享圖片


實戰部署:

1)實戰部署說明:

1·需要兩臺 CenOS 7.4 (也可以是其他版本),需要源碼包:libevent-2.1.8、memcached-1.5.6。


2·客戶端需要:安裝 LAMP 架構和源碼包:memcache-2.2.7


3· 源碼包提供(包括LAMP所有的包):此文章所需的源碼包,請點擊下載,密碼:dqth


2)案例環境:

本案例使用兩臺 CenOS 7.4 系統完成,一臺是 Memcached 服務器,另一臺是基於 LAMP 架構進行 Memcached 擴展的 Memcached API 客戶端,可以根據生產環境需求進行架構調整。

操作系統 IP地址 所需源碼包 角色
CenOS 7.4 192.168.106.129 LAMP、memcache-2.2.7.tgz Memcached API 客戶端
CenOS 7.4 192.168.106.133 libevent-2.1.8-stable.tar.gz 、 memcached-1.5.6.tar.gz Memcached 服務端







3)安裝 Memcached 服務器
(1)安裝 Libevent ,它是一款跨平臺的時間處理接口的封裝,可以兼容多個操作系統的時間訪問。Memcached 的安裝依賴於 Libevent ,所以需要先安裝它,源碼包在文章前已經提供,需要的點擊下載

[root@localhost ~]# tar xvf libevent-2.1.8-stable.tar.gz -C /opt/ ----(解壓到 /opt 目錄下,只是個人習慣!


[root@localhost ~]# cd /opt/libevent-2.1.8-stable/


[root@localhost libevent-2.1.8-stable]# ./configure --prefix=/usr/local/libevent ---(指定安裝路徑


[root@localhost libevent-2.1.8-stable]# make && make install ---(開始制作,編譯


就這麽簡單,Libevent 安裝完畢,下面需要開始 安裝 Memcached。


(2)安裝 Memcached
采用源碼的方式進行 Memcached 的編譯安裝,安裝時需要指定 Libevent 的安裝路徑

[root@localhost ~]# tar xvf memcached-1.5.6.tar.gz -C /opt/ ---(解壓 軟件包
[root@localhost ~]# cd /opt/memcached-1.5.6/


[root@localhost memcached-1.5.6]# ./configure --prefix=/usr/local/memcached --with-libevent=/usr/local/libevent ---(這裏安裝需要註意的是,需要指定 Libevent 的安裝路徑,因為 Memcached 需要依賴它
[root@localhost memcached-1.5.6]# make && make install ---(開始制作編譯


(3)Memcached 優化與啟動

[root@localhost memcached-1.5.6]# ln -s /usr/local/memcached/bin/* /usr/local/bin/ ---(建立軟連接,方便使用它的命令


[root@localhost memcached-1.5.6]# memcached -d -m 32m -p 11211 -u root ---(啟動 memcached
參數說明:-d:守護進程、-m:指定緩存大小為32M 、-p:指定默認端口11211 、 -u:指定 登陸用戶為 root


查看一下啟動情況:
[root@localhost memcached-1.5.6]# netstat -antp | grep memcached


關閉防火墻、SE功能
[root@localhost memcached-1.5.6]# systemctl stop firewalld.service
[root@localhost memcached-1.5.6]# setenforce 0


(4)Memcached 連接

需要安裝 telnet 軟件
[root@localhost ~]# yum install telnet -y


開始連接 本地memcached 11211端口:
[root@localhost ~]# telnet 127.0.0.1 11211


Memcached 基本操作:

//第一個0:不設置序列號,第二個0:無過期時間,第3個值是,字符長度
add username 0 0 7  

//查看username這個值的有效長度
get username

//查看username 這個值的有效長度和更新因子
gets username

//更新username這個值,有這個值則更新,無則創建
set username 0 0 8

//更新username,但是這個username必須存在
replace username 0 0 6

//檢查更新,更新因子必須和查詢的因子一樣才能更新
cas username 0 0 7 4

//在原有的值後面追加
append username 0 0 7

//在原有的值前面追加
prepend username 0 0 2

//刪除username
delete username

//清除所有緩存數據
flush_all

//顯示狀態信息
stats

//退出 
quit

到此 Memcached 服務端 安裝完畢,下面就需要開始安裝 Memcached API 客戶端


4)安裝 Memcached API 客戶端

(1) 安裝 LAMP 架構的教程請訪問:LAMP 安裝教程 ----(客戶端必須要安裝 LAMP 架構


LAMP 架構安裝完畢後,測試 MySQL 數據庫。
[root@localhost ~]# mysql -u root -p 123123
create database a
grant all on a.* to ‘auser‘@‘%‘ identified by ‘123123‘;
flush privileges;

編寫代碼,用網頁測試數據庫:
[root@localhost ~]# vim /usr/local/httpd/htdocs/index.php
<?php
$link=mysql_connect(‘192.168.106.129‘,‘auser‘,‘123123‘);
if($link) echo "<h1>Success!!</h1>";
else echo "Fail!!";
mysql_close();
?>

技術分享圖片


開始訪問網頁:http://192.168.106.129/index.php
顯示:Success!! 則說明,LAMP 中MySQL搭建成功。如下圖:
技術分享圖片


LAMP 到此也搭建完成,下面需要安裝 Memcached 客戶端軟件


(2)開始安裝 Memcached 客戶端

[root@localhost ~]# yum install autoconf -y
[root@localhost ~]# tar xvf memcache-2.2.7.tgz -C /opt ---(解壓軟件包)
[root@localhost ~]# cd /opt/memcache-2.2.7


**這裏需要註意的是:memcache-2.2.7.tgz 源碼包中默認是沒有 configure 配置腳本,需要使用 PHP 的 phpize 腳本生成配置腳本 ,否則沒辦法 ./configure**

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


Configuring for:
PHP Api Version:         20131106
Zend Module Api No:      20131226
Zend Extension Api No:   220131226

-----
![](http://i2.51cto.com/images/blog/201809/24/456fb2a1bc2b7f3487705c7ef15eb55c.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)

-----
> [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 ----(開始編譯)

-----

記錄以下這段路徑,在PHP主配置文件需要用到:
/usr/local/php5/lib/php/extensions/no-debug-zts-20131226/


-----
(3)配置 PHP 添加 Memcached 組件
> 編輯PHP配置文件 php.ini ,添加 Memcached組件,如果沒有配置文件,我們拷貝一份模板
> [root@localhost ~]# cd /opt/php-5.6.11/
> [root@localhost php-5.6.11]# cp php.ini-development /usr/local/php5/php.ini
> [root@localhost ~]# vim /usr/local/php5/php.ini

-----

編輯內容如下:
extension_dir="/usr/local/php5/lib/php/extensions/no-debug-zts-20131226" ---(這個路徑就是,之前記錄下的路)
extension=memcache.so


-----
(4)測試 Memcached API 功能
> 通過編寫簡單的PHP 測試代碼調用 Memcache 程序接口,來測試是否與 Memcached 服務器協同工作,代碼如下:
> [root@localhost ~]# vim /usr/local/httpd/htdocs/index.php

-----

<?php
$memcache = new Memcache();
$memcache->connect(‘192.168.106.133‘,11211);
$memcache->set(‘key‘,‘Memcache test Successfull!‘,0,60);
$result = $memcache->get(‘key‘);
unset($memcache);
echo $result;
?>



-----
> **此段代碼的作用是在客戶端連接 memcached 服務器,設置名為 “key”的鍵的值為Memcache test Successfull ,並讀取顯示。顯示成功,則表示服務器與客戶端協同工作正常,下圖是用瀏覽器訪問結果:**
![](http://i2.51cto.com/images/blog/201809/24/667385df002b614c62288b959a9284b3.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)

-----
**高性能內存對象緩存 Memcached 搭建成功!!!**

-----
文章總結:
1· Memcached 是分布式內存對象緩存系統,因為所有數據都存儲在內存中,從而用於網站加速。
2· Memcached 分布式實現不是在服務端實現而是在客戶端實現的。
3· Memcached 支持任意存儲類型的數據。

【提供源碼包】高性能存儲對象緩存 之【Memcached】