Memcache服務搭建

Memcachephp

  Memcache的做用網上資料都講的很好,說簡單點就是減輕讀取數據庫的壓力,原理也很簡單:html

  被請求的數據會先到memcache裏去取,若是沒有就去數據庫裏取,順便給memcache帶一份。java

  每次更新數據也先更新memcache裏的數據,若是沒有則更新數據庫,同時更新memcache。python

  所以須要注意的是這個數據是易失去性存儲的。mysql

 

模式和端口sql

  Memcache是一個基於C/S的結構:數據庫

      服務端:使用Memcached軟件vim

  客戶端:使用Memcache插件 (這個插件是結合後端語言好比php python java)後端

  服務端口:11211(可改)瀏覽器

 

軟件清單:

  libevent依賴庫      http://libevent.org/

  memcache插件       http://pecl.php.net/package/memcache/

  memcached服務                 http://www.memcached.org/

  lamp環境           yum -y install httpd php php-mysql mysql-server

      操做系統                          CentOS-6.5(x86_64)

 

 

1.將上傳相關軟件包,安裝lamp環境

      yum -y install httpd php php-mysql mysql-server

      /etc/init.d/httpd start

      echo "<?php phpinfo()?>" > /var/www/html/index.php

 

      而後用瀏覽器訪問查看php信息,在信息裏面是找不到memcache的

 

2.安裝libevent插件

  tar xf libevent-2.0.22-stable.tar.gz

  cd libevent-2.0.22-stable

     ./configure --prefix=/usr/local/libevent && make && make install

 

 

3.安裝memcached服務端

  tar xf memcached-1.4.36.tar.gz

  cd memcached-1.4.36

  ./configure --prefix=/usr/local/memcached --with-libevent=/usr/local/libevent/

  make && make install

 

  安裝好後會在/usr/local/memcached/bin/目錄下生成memcached

 

4.配置環境變量

  cd  /etc/profile.d/ 

  vim mem.sh

  export PATH="/usr/local/memcached/bin:$PATH" #寫入profile文件開機自動導入

  memcached -m 32 -p 11211 -d -c 8192 -u root  #m分出內存大小 p 端口 d 混合模式 c 最大鏈接數

  netstat -anptu | grep memcached        #查看是否啓動,運行多實例更改端口便可

  free -m                      #能夠看到內存愈來愈少,由於被分配出去了 
  ps -aux | grep memcached            #查看進程pid是多少

  kill -9 1234                   #關閉memcached服務

   pkill memcached                  #同上

 

 

5.memcached使用

  yum -y install nc telnet

     1)使用nc命令鏈接memcache

   printf "set first 0 30 5\r\nmmmmm\r\n" | nc 127.0.0.1 11211   #存數據 (字段分別爲 key,標誌,效期,長度,值 )

  printf "get first\r\n" | nc 127.0.0.1 11211            #取數據 

  2)使用telnet命令鏈接memcache

  telnet 127.0.0.1 11211    #而後就可使用相關的memcached命令了

 

6.下面是關於memcached相關的操做命令

  

    add key1 0 30 3    #添加數據30爲效期(若是寫0表示永不過時) 3爲大小

  set key1 0 30 3    #更新數據,不存在會自動建立

  replace key1 0 30 3  #更新數據,不存在會報錯

  delete key1      #刪除數據

  get key1       #獲取數據

  gets key 1       #獲取更多信息

  stats setting    #查看配置信息

  stats slabs     #查看slab

  stats items     #查看item

  stats size      #查看大小

 

 

7.安裝memcache客戶端php插件

  安裝phpize命令能夠爲php添加新模塊

  若是不知道是什麼包可使用 yum provides */phpize

  yum -y install php-devel

  tar xf memcache-2.2.7.tgz

  cd memcache-2.2.7

  phpize          #打模塊,生成configure等文件

  which php-config      #查看php-config路徑位置

  ./configure --enable-memcache --with-php-config=/usr/bin/php-config

  make && make install

 

  安裝號後模塊會被安裝置/usr/lib64/php/modules/memcache.so

  cd /etc/php.d/

  cp mysql.ini memcache.ini  #vim進行編輯將extension的值設置成memcache.so

 

  重啓服務後能夠看到php已經支持了memcache模塊了

  

 

8.後面能夠結合php網站測試數據庫相關

  tar xf memcache_page.tar.gz -C /var/www/html/

  cd !$

  

  測試頁面有 mysql_connect.php 編輯一下

     

 

  所以須要先把mysql的用戶設置一下

  /etc/init.d/mysqld  start

  mysql_secure_installation 

  或者本身在數據庫裏

  grant all on *.* to 'root'@'127.0.0.1' identified by '123456'

  flush privileges

  而後瀏覽器訪問mysql_connect.php

  

  對接成功

 

  這裏能夠閱讀read.php和write.php瞭解memcache的讀寫原理

read.php

<?php $memcachehost = '192.168.1.113'; $memcacheport = 11211; $memcachelife = 60;          #memcache默認有效期
$memcache = new Memcache; $memcache->connect($memcachehost,$memcacheport) or die ("Could not connect");  #鏈接memcache服務器
$num=$_POST["num"]; $db=db1; $tb=T1; $query="select * from $tb where ID=$num";  #mysql查詢語句 #$key=md5($query);
$key=md5($num);                  #對參數進行加密,能夠看出memcache存儲的值是進過加密的
if(!$memcache->get($key))            #嘗試先從memcache取值,若是沒有去數據庫取,順便給memcache來一份
{ $conn=mysql_connect("127.0.0.1","root","123456"); mysql_select_db($db); $result=mysql_query($query); # echo "mysql $num";
                while ($row=mysql_fetch_assoc($result)) { $arr[]=$row; } $f = 'mysql'; $memcache->add($key,serialize($arr),0,30); $data = $arr ; } else{ $f = 'memcache'; $data_mem=$memcache->get($key); $data = unserialize($data_mem); } echo "$f $num"; echo "key is $key"; echo "<br>"; ?>

 

write.php

<?php $memcachehost = '192.168.1.113'; $memcacheport = 11211; $memcachelife = 60; $memcache = new Memcache; $memcache->connect($memcachehost,$memcacheport) or die ("Could not connect"); $num=$_POST["num"]; $db=db1; $tb=T1; $query="insert into $tb values($num)"; #$key=md5($query);
$key=md5($num); if(!$memcache->get($key))            //先嚐試更新memcache,若是不存在,則再去更新數據庫,同時更新存儲到memcachce
{ $conn=mysql_connect("127.0.0.1","root","123456"); mysql_select_db($db); $result=mysql_query($query); while ($row=mysql_fetch_assoc($result)) { $arr[]=$row; } $f = 'mysql'; $memcache->add($key,serialize($arr),0,30);        //mysql 插入成功後,插入 memcached
                $data = $arr ; #} #else{
        $f1 = 'memcache'; $data_mem=$memcache->get($key); $data = unserialize($data_mem); } echo "$f $f1 $num"; echo "<br>"; ?>

 關於php memcache簡單用法參見http://www.cnblogs.com/demonxian3/p/6868361.html

 上面兩個php裏能夠看到調用了數據庫的db1 和 表T1所以須要建立一下

  seq 1 999 > /tmp/sum  #建立1-999的測試數據

 

  鏈接數據庫導入數據

  create database db1; create T1(id int)engine=innodb;

  load data infile '/tmp/sum' into table T1;  #導入測試數據

  科普一下:使用history查看歷史命令,輸入!+數字能夠執行編號的那條命令

  !111

 

  用瀏覽器來訪問那個測試頁面

  

 

   測試讀取數據,從數據庫裏查詢出id爲5的值

    

    

  後退再去取一次

   

  測試寫入數據

   

   

  最後給你們推薦一款很好用的memcache管理工具:memadmin    php寫的

 

搭建memcache過程可能會出現的問題:

執行 memcached 啓動命令時,報錯,提示:error while loading shared libraries: libevent-2.1.so.6: cannot open shared object file: No such file or directory

  • 查看 memcached 命令缺失什麼庫
ldd /usr/local/memcached/bin/memcached

結果: libevent-2.1.so.6 模塊找不到

 

  • 查看 libevent-2.1.so.6 是否存在
locate libevent-2.1.so.6

結果: 系統已經安裝了該模塊,在路徑 /usr/local/lib/

 

  • 查看 memcached 查找依賴庫的路徑
LD_DEBUG=libs /usr/local/memcached/bin/memcached -v

結果: 在 /lib64/ 目錄中查找,因此找不到已經安裝好的

 

  • 映射 libevent-2.1.so.6 到 /lib64 路徑中
ln -s /usr/local/lib/libevent-2.1.so.6 /usr/lib64/libevent-2.1.so.6

結果:這樣處理後,memcached就能夠搜索到該文件了

 

  • 啓動memcached服務
/etc/init.d/memcached restart
相關文章
相關標籤/搜索