memcache基本講解

Memcached技術php

 

介紹:html

memcached是一種緩存技術他能夠把你的數據放入內存,從而經過內存訪問提速,由於內存最快的, memcached技術的主要目的提速,java

memachec 中維護了一張大的hashtable表 ,該表是在內存,表的結構是mysql

key    valuelinux

字串  (字串,數值,數組,對象,布爾,二進制數據,nullajax

 

原理說明:redis

 

 

 

u 安裝並使用memcached算法

安裝步驟sql

(1) 下載memcached軟件數據庫

(2) 安裝

進入cmd ,切換到 memcached.exe 文件所在目錄

memcached.exe –d install

(3) 啓動memcached

第一種,能夠到服務點擊啓動

第二種命令行

memcached.exe –m 200MB –d start  【以deamon方式啓動,默認64M

 

若是你在啓動時,win7啓動不成功則可使用以下方法

memcached.exe –p 端口號

 

啓動方法不要關閉控制檯.

 

端口號的範圍 : 0-65535  , 由於端口號是用兩個字節來表示

有名端口: 0-1024 已經用程序使用 , apache 80  , mysql 3306 , ftp 21 , ssh 22

oracle: 1521, stmp: 25 

 

使用netstat –an 若是看到 11211端口在監聽,說明啓動ok

netstat –anb 是哪一個程序監聽這個指令還能夠看到有哪些用戶鏈接到咱們的服務器.

 

若是沒有安裝好,緣由可能

  1. 若是你是win7, win7對安全性高,全部,必須以adminstartor 身份來安裝.

你切換成adminstrator , 去安裝,在啓動

  1. 你的memcached.exe 目錄有中文,或特殊字符保證目錄沒有中文和特殊字符.

 

(4) 準備研究若是對memcached進行curd操做.

 

 

 

看看telnet如何操做 (curd

 

  1. 登陸到telnet鏈接到 memcached服務

telnet 127.0.0.1  11211

 

若是大家不能使用telnet 是由於系統不存在 telnet.exe , 就能夠到其它機器上拷貝 telnet.exe 放在 c:\windows\system32 便可

  1. 增長

基本語法是:

add key名 存放時間(數據大小(字符)

舉例:

add key1 0 30 5

 

  1. 如何獲取

基本語法是:

get key

get key1

  1. 修改

 

set key名 存放時間 數據大小.

 

舉例:

set key1 0 40 5

☞ 若是key1不存在,則至關於增長新,若是存在,則至關有替換

 

replace key名 存放時間 數據大小

replace key1 0 40 5

☞ 若是key1不存在,則失敗,這個指令要求key必須存在.

 

  1. 刪除

基本語法是

delete key

好比

delete key1

 

append

Append data to existing key

append key 0 60 15

prepend

Prepend data to existing key

prepend key 0 60 15

 

 

flush_all 能夠統一把數據清空.

 

 

這裏主要你們能夠去計算出命中率 cmd_hits/cmd_get . 越高越好.

 

 

 

 

u 如何使用php程序操做咱們的memcached服務 curd.

步驟,準備工做.

(1) 把 php_memcache.dll 文件拷貝 phpext 

☞ 不一樣版本的php 所使用的 php_memcache.dll 的版本不同

(2) 修改php.ini文件,加載 php_memcache.dll (該文件就是封裝了一堆函數)

;加載php_memcache.dll 文件

extension=php_memcache.dll

(3) 從新啓動apache

(4) 咱們寫程序來完成curd操做.

 

細節在咱們添加數據的時候,若是 

bool Memcache::add ( string $key , mixed $var [, int $flag [, int $expire ]] )

若是報 expire 設爲表示,永不過時.(只要memcache不從新啓動,就永遠在mem)

exprie 直接給的是秒數,則最大 30*3600*24

若是你但願保持時間超過30  time()+天數*3600*24 便可

 

最後代碼:

mem1.php 

 

<?php

 

    //建立一個mem對象實例

$mem=new Memcache;

     

if(!$mem->connect("127.0.0.1",11211)){

die('鏈接失敗!');

}

 

//增長

 

//1.增長一個字串

/* if($mem->set('key1',"beijing",MEMCACHE_COMPRESSED,60)){

 

echo '添加ok';

}*/

 

//2.添加數值

/* if($mem->set('key1',100,MEMCACHE_COMPRESSED,60)){

 

echo '添加ok';

}*/

 

//3.添加數組

//在添加數組是,根據須要但願序列號放入  ,

//serialize<=>unserialize, 若是根據須要,也能夠json_encode <=> json_decode

$arr=array("bj",'tj');

if($mem->set('key1',$arr,MEMCACHE_COMPRESSED,time()+31*3600*24)){

 

echo '添加數組ok99111';

}

//4.添加對象

/* class Dog{

public $name;

public $age;

public function __construct($name,$age){

$this->name=$name;

$this->age=$age;

}

}

 

$dog1=new Dog('小狗',50);

if($mem->set('key1',$dog1,MEMCACHE_COMPRESSED,60)){

 

echo '添加對象ok';

}*/

 

//5.添加null 布爾值

/* if($mem->set('key1',false,MEMCACHE_COMPRESSED,60)){

 

echo '添加布爾ok';

}*/

 

//6. 資源類型放入.

/* $con=mysql_connect("127.0.0.1","root","root");

if(!$con){

die('鏈接數據庫失敗');

}

var_dump($con);

echo "<br/>";

if($mem->set('key1',$con,MEMCACHE_COMPRESSED,60)){

 

echo '添加資源ok';

}*/

 

 

//查詢

 

$val=$mem->get('key1');

 

var_dump($val);

 

//修改

//可使用replace

if($mem->replace("key11",'hello',MEMCACHE_COMPRESSED,60)){

echo 'replace ok';

}else{

echo 'replace no ok';

}

 

 

 

//刪除

echo "<br/>";

if($mem->delete('key14')){

echo 'key14 刪除';

}else{

echo 'key14不存在';

}

 

 

mem2.php

 

<?php

 

 

 

 

//這個文件去操做memcached服務

 

 //建立一個mem對象實例

$mem=new Memcache;

     

if(!$mem->connect("127.0.0.1",11211)){

die('鏈接失敗!');

}

 

//在另外文件中取出對象時,有個注意的地方,對應php5.2這個版本會提示錯誤,

//php5.3這個版本會提示 incomplete 信息解決方法是聲明類定義便可

 

class Dog{

public $name;

public $age;

public function __construct($name,$age){

$this->name=$name;

$this->age=$age;

}

}

 

$dog=$mem->get('key1');

 

var_dump($dog);

 

test.php 說明serilize 和 json_encode用法:

//何時使用serilize 何時使用json_encode [ajax配合]

 

 

 

 

練習請你們使用php 程序 memcache.dll 完成對memcahce增刪改查

20min 

 

u 如何使用PHP源碼來操做memcached服務

若是管理員不讓咱們去加載 memcache.dll 文件,咱們能夠直接經過源碼操做.

 

關閉擴展.

 

代碼mem3.php

<?php

 

 require_once 'memcached-client.php';

  

  $mc = new memcached(array(

               'servers' => array('127.0.0.1:11211'), //鏈接的memcacheip和端口

               'debug'   => false, //是否debug

               'compress_threshold' => 10240, /*最大壓縮*/

               'persistant' => true)); /*是不是持久鏈接*/

 

 

  $mc->set('key1', array('some', 'array'));

 // $mc->replace('key', 'some random string');

 

  $val = $mc->get('key1');

var_dump($val);

//修改

$mc->replace('key1', "北京");

$val = $mc->get('key1');

 

var_dump($val);

//刪除

$mc->delete('key1');

  $val = $mc->get('key1');

echo "刪除後";

var_dump($val);

 

 

u Memcached 機制的深刻了解

 

 

 

 

③ , memcache的數據是放入到內存,而且在數據爆滿的狀況下,使用LRU 算法刪除

 

 

寫段代碼說明: mem4.php

 

 

mem5.php 取出.

 

 

總結:

  1. mem服務的數據不是同步數據是分佈的
  2. 把什麼數據放入到哪一個memcached是由客戶端的mem對象決定
  3. 當執行addServer的時候,並非當即去鏈接mem服務,而是經過計算,hash後纔去決定鏈接哪一個mem服務,所以當你大量加入服務器到鏈接池,沒有多餘開銷

 

u memcache的細節討論

① 生命週期

從數據放入mem開始計時,直到時間到了,就銷燬若是時間爲0, 則表示不過時.

memcache的數據被銷燬的狀況以下:

  1. 時間到
  2. 重啓memcached服務
  3. 重啓memcached服務所在的機器
  4. delete / flush 銷燬數據

② 如何把session數據放入到memcached服務中.

步驟:

  1. 修改php.ini的配置文件

以下:

;[sesson.save_handler user|files|memcache]

session.save_handler = memcache

session.save_path = "tcp://127.0.0.1:11211"

③ 測試一把,重啓apache

測試ok 

<?php

 

//傳統的代碼

session_start();

$_SESSION['name']='天龍八部300';

$_SESSION['city']='beijing';

class Dog{

public $name;

}

 

$dog1=new Dog;

$dog1->name='abcde';

$_SESSION['dog']=$dog1;

 

//若是session數據入mem,那他必定是以session_id

//key值進行添加

 

//取出

$name=$_SESSION['name'];

echo "name=$name";

echo "sessionid=".session_id();

 

 

u 思考,若是管理員,不讓咱們修改 php.ini 文件,咱們如何處理sessionmemcached這個功能咱們經過一個函數能夠去修改 php.ini 的配置.

 

代碼:

<?php

 

ini_set("session.save_handler","memcache");

ini_set("session.save_path","tcp://127.0.0.1:9999");

 

同時你也能夠經過 ini_set 去動態的修改對php.ini 的其它設置 。可是他不影響其它php頁面,也不會去修改php.ini 文件自己只對本頁面生效.

 

u memcached vs session比較

memcached 主要的目的是提速 ,所以它是一種無狀態的數據.即,數據不和用戶綁定.

session數據是和綁定的,所以是一種有狀態數據.

 

u memached安全性

如何使用memcached 服務纔是安全的.

 

windows下經過啓用防火牆來保護咱們的memcached,原理圖:

 

 

linux 也可使用防火牆.

setup 配置防火牆

iptables -a input -p tcp -s 127.0.0.1 -dport 11211 -j ACCEPT

 

u 什麼樣的數據適合放入memcached?

 

memcached技術相似是redis (key/value數據庫)

 

課後練習:

這個這個

 

這個練習主要是讓你們去練習crud的操做.

 

 

 

詳細講解:http://blog.csdn.net/pi9nc/article/details/17317231

 

初始化:memcache 

static {  
        String[] serverlist = { "server1.com:port", "server2.com:port" };  
   
        SockIOPool pool = SockIOPool.getInstance();  
        pool.setServers(serverlist);  
        pool.initialize();  
 }

  建立一個client對象: 

MemCachedClient mc = new MemCachedClient(); 

  建立一個緩存: 

MemCachedClient mc = new MemCachedClient();  
 String key = "cacheKey1";  
 Object value = SomeClass.getObject();  
 mc.set(key, value);  

  經過key刪除一個緩存: 

MemCachedClient mc = new MemCachedClient();  
 String key = "cacheKey1";  
 mc.delete(key);

  經過key獲取緩存對象: 

MemCachedClient mc = new MemCachedClient();  
 String key = "key";  
 Object value = mc.get(key);  

  獲取多個緩存對象: 

MemCachedClient mc = new MemCachedClient();  
 String[] keys = { "key", "key1", "key2" };  
 Map<Object> values = mc.getMulti(keys); 

  刷新所有緩存: 

MemCachedClient mc = new MemCachedClient();  
 mc.flushAll(); 

  

7、            Memcached客戶端程序

Memcached的java客戶端已經存在三種了:

?  官方提供的基於傳統阻塞io由Greg Whalin維護的客戶端

?  Dustin Sallings實現的基於java nio的Spymemcached

?  XMemcached


1. 三種API比較 
1)      memcached client for java

較早推出的memcached JAVA客戶端API,應用普遍,運行比較穩定。


2)      spymemcached

A simple, asynchronous, single-threaded memcached client written in java. 支持異步,單線程的memcached客戶端,用到了java1.5版本的concurrent和nio,存取速度會高於前者,可是穩定性很差,測試中常報timeOut等相關異常。


3)      xmemcached

XMemcached一樣是基於java nio的客戶端,java nio相比於傳統阻塞io模型來講,有效率高(特別在高併發下)和資源耗費相對較少的優勢。傳統阻塞IO爲了提升效率,須要建立必定數量的鏈接造成鏈接池,而nio僅須要一個鏈接便可(固然,nio也是能夠作池化處理),相對來講減小了線程建立和切換的開銷,這一點在高併發下特別明顯。所以XMemcached與Spymemcached在性能都很是優秀,在某些方面(存儲的數據比較小的狀況下)Xmemcached比Spymemcached的表現更爲優秀,具體能夠看這個Java Memcached Clients Benchmark。


2.  建議

因爲memcached client for java發佈了新版本,性能上有所提升,而且運行穩定,因此建議使用memcached client for java。

XMemcached也使用得比較普遍,並且有較詳細的中文API文檔,具備以下特色:高性能、支持完整的協議、支持客戶端分佈、容許設置節點權重、動態增刪節點、支持JMX、與Spring框架和Hibernate-memcached的集成、客戶端鏈接池、可擴展性好等。

下面給出這三種客戶端的示例程序。


3.  示例程序
1)      memcached client for java

從前面介紹的Java環境的Memcached客戶端程序項目網址裏,下載最新版的客戶端程序包:java_memcached-release_2.5.1.zip,解壓後,文件夾裏找到java_memcached-release_2.5.1.jar,這個就是客戶端的JAR包。將此JAR包添加到項目的構建路徑裏,則項目中,就可使用Memcached了。

示例代碼以下:

package temp;

 

import com.danga.MemCached.*;

import org.apache.log4j.*;

 

public class CacheTest {

    public static void main(String[] args) {

       /**

        * 初始化SockIOPool,管理memcached的鏈接池

        * */

       String[] servers = { "10.11.15.222:10000" };

       SockIOPool pool = SockIOPool.getInstance();

       pool.setServers(servers);

       pool.setFailover(true);

       pool.setInitConn(10);

       pool.setMinConn(5);

       pool.setMaxConn(250);

       pool.setMaintSleep(30);

       pool.setNagle(false);

       pool.setSocketTO(3000);

       pool.setAliveCheck(true);

       pool.initialize();

      

       /**

        * 創建MemcachedClient實例

        * */

       MemCachedClient memCachedClient = new MemCachedClient();

       for (int i = 0; i < 1000; i++) {

           /**

            * 將對象加入到memcached緩存

            * */

           boolean success = memCachedClient.set("" + i, "Hello!");

           /**

            * 從memcached緩存中按key值取對象

            * */

           String result = (String) memCachedClient.get("" + i);

           System.out.println(String.format("set( %d ): %s", i, success));

           System.out.println(String.format("get( %d ): %s", i, result));

       }

    }

}

  2)      spymemcached

spymemcached當前版本是2.5版本,官方網址是:http://code.google.com/p/spymemcached/。能夠從地址:http://spymemcached.googlecode.com/files/memcached-2.5.jar下載最新版原本使用。

示例代碼以下:

package temp;

 

import java.net.InetSocketAddress;

import java.util.concurrent.Future;

 

import net.spy.memcached.MemcachedClient;

 

public class TestSpyMemcache {

    public static void main(String[] args) {

       // 保存對象

       try {

           /* 創建MemcachedClient 實例,並指定memcached服務的IP地址和端口號 */

           MemcachedClient mc = new MemcachedClient(new InetSocketAddress("10.11.15.222", 10000));

           Future<Boolean> b = null;

           /* 將key值,過時時間(秒)和要緩存的對象set到memcached中 */

           b = mc.set("neea:testDaF:ksIdno", 900, "someObject");

           if (b.get().booleanValue() == true) {

              mc.shutdown();

           }

       } catch (Exception ex) {

           ex.printStackTrace();

       }

       // 取得對象

        try {

           /* 創建MemcachedClient 實例,並指定memcached服務的IP地址和端口號 */

           MemcachedClient mc = new MemcachedClient(new InetSocketAddress("10.11.15.222", 10000));

           /* 按照key值從memcached中查找緩存,不存在則返回null */

           Object b = mc.get("neea:testDaF:ksIdno");

           System.out.println(b.toString());

           mc.shutdown();

       } catch (Exception ex) {

           ex.printStackTrace();

       }

    }

}

  3)      xmemcached

Xmemcached的官方網址是:http://code.google.com/p/xmemcached/,能夠從其官網上下載最新版本的1.2.4來使用。地址是:http://xmemcached.googlecode.com/files/xmemcached-1.2.4-src.tar.gz

示例代碼以下:

package temp;

 

import java.io.IOException;

import java.util.concurrent.TimeoutException;

 

import net.rubyeye.xmemcached.utils.AddrUtil;

import net.rubyeye.xmemcached.MemcachedClient;

import net.rubyeye.xmemcached.MemcachedClientBuilder;

import net.rubyeye.xmemcached.XMemcachedClientBuilder;

import net.rubyeye.xmemcached.exception.MemcachedException;

 

public class TestXMemcache {

    public static void main(String[] args) {

       MemcachedClientBuilder builder = new XMemcachedClientBuilder(AddrUtil

              .getAddresses("10.11.15.222:10000"));

       MemcachedClient memcachedClient;

       try {

           memcachedClient = builder.build();

      

           memcachedClient.set("hello", 0, "Hello,xmemcached");

           String value = memcachedClient.get("hello");

           System.out.println("hello=" + value);

           memcachedClient.delete("hello");

           value = memcachedClient.get("hello");

           System.out.println("hello=" + value);

           // close memcached client

           memcachedClient.shutdown();

       } catch (MemcachedException e) {

           System.err.println("MemcachedClient operation fail");

           e.printStackTrace();

       } catch (TimeoutException e) {

           System.err.println("MemcachedClient operation timeout");

           e.printStackTrace();

       } catch (InterruptedException e) {

           // ignore

       }catch (IOException e) {

           System.err.println("Shutdown MemcachedClient fail");

           e.printStackTrace();

       }

    }

}

  

(八)  64位機器安裝Memcache
1.   安裝

在64位的機器上安裝Memcache和在32位的機器上安裝的操做是同樣的。在安裝的過程當中,可使用以下的命令來查看安裝是否成功,以進行確認。

1)   確認libevent安裝

查看libevent是否安裝成功:

# ls -al /usr/lib | grep libevent

在命令行出現以下信息,代表安裝成功:

   lrwxrwxrwx   1 root root     21 Mar 22 18:41 libevent-1.2.so.1 -> libevent-1.2.so.1.0.3

   -rwxr-xr-x   1 root root 262475 Mar 22 18:41 libevent-1.2.so.1.0.3

   -rw-r--r--   1 root root 430228 Mar 22 18:41 libevent.a

   -rwxr-xr-x   1 root root    811 Mar 22 18:41 libevent.la

   lrwxrwxrwx   1 root root     21 Mar 22 18:41 libevent.so -> libevent-1.2.so.1.0.3

2)   確認memcache安裝

查看memcache是否安裝成功:

# ls -al /usr /bin/mem*

在命令行出現以下信息,代表安裝成功:

   -rwxr-xr-x  1 root root 114673 Mar 22 18:52 /usr/local/src/memcached

   -rwxr-xr-x  1 root root 120092 Mar 22 18:52 /usr/local/src/memcached-debug

2.   64位的問題及修復
1)   問題

安裝完成了,如今咱們看一下memcache的幫助:

#/usr/local/src/memecached -h

這時候出現了以下錯誤:

   memcached: error while loading shared libraries: libevent-1.2.so.1: cannot open shared    object file: No such file or directory

2)   修復

下面說下修復過程:

#LD_DEBUG=libs memcached -v #查看memcached的libs的路徑

在命令上出現了以下信息:

5427:     find library=libevent-1.2.so.1 [0]; searching

5427:      search cache=/etc/ld.so.cache

5427: search        path=/lib64/tls/x86_64:/lib64/tls:/lib64/x86_64:/lib64:/usr/lib64/tls/x86_64:/usr/lib64/tls:/usr/lib64/x86_64:

/usr/lib64              (system search path)

5427:       trying file=/lib64/tls/x86_64/libevent-1.2.so.1

5427:       trying file=/lib64/tls/libevent-1.2.so.1

5427:       trying file=/lib64/x86_64/libevent-1.2.so.1

5427:       trying file=/lib64/libevent-1.2.so.1

5427:       trying file=/usr/lib64/tls/x86_64/libevent-1.2.so.1

5427:       trying file=/usr/lib64/tls/libevent-1.2.so.1

5427:       trying file=/usr/lib64/x86_64/libevent-1.2.so.1

5427:       trying file=/usr/lib64/libevent-1.2.so.1

5427:            memcached: error while loading shared libraries: libevent-1.2.so.1: cannot open shared object file: No such                   file or directory

如今應該記錄下來libs的位置,我選擇的是trying file=/usr/lib64/libevent-1.2.so.1,如今咱們利用這個來作個符號連接:

# ln -s /usr/lib/libevent-1.4.so.2 /usr/lib64/libevent-1.4.so.2

下面咱們繼續使用memcached -h作下測試,終於出現了以下信息:

    memcached 1.2.0

    -p <num>      port number to listen on

    -s <file>     unix socket path to listen on (disables network support)

    -l <ip_addr>  interface to listen on, default is INDRR_ANY

    -d            run as a daemon

    -r            maximize core file limit

    -u <username> assume identity of <username> (only when run as root)

    -m <num>      max memory to use for items in megabytes, default is 64 MB

    -M            return error on memory exhausted (rather than removing items)

    -c <num>      max simultaneous connections, default is 1024

    -k            lock down all paged memory

    -v            verbose (print errors/warnings while in event loop)

    -vv           very verbose (also print client commands/reponses)

    -h            print this help and exit

    -i            print memcached and libevent license

    -b            run a managed instanced (mnemonic: buckets)

    -P <file>     save PID in <file>, only used with -d option

    -f <factor>   chunk size growth factor, default 1.25

    -n <bytes>    minimum space allocated for key+value+flags, default 48

說明memcached安裝成功。(應該是機器是64位的緣由,因此將so文件放到了lib64下面,而不是lib下面,使得memcached找不到了so文件)。

下面,咱們來啓動一個Memcached的服務器端:

# /usr/local/src/memcached -d -m 10  -u root -l 192.168.0.200 -p 12000 -c 256 -P /tmp/memcached.pid

 

(九)    Windows下的Memcache安裝
1.  安裝

在這裏簡單介紹一下Windows下的Memcache的安裝:

1. 下載memcache的windows穩定版,解壓放某個盤下面,好比在c:\memcached

2. 在終端(也即cmd命令界面)下輸入‘c:\memcached\memcached.exe -d install’安裝

3. 再輸入:‘c:\memcached\memcached.exe -d start’啓動。NOTE: 之後memcached將做爲windows的一個服務每次開機時自動啓動。這樣服務器端已經安裝完畢了。


2.  memcached的基本設置

?  -p 監聽的端口

?  -l 鏈接的IP地址, 默認是本機

?  -d start 啓動memcached服務

?  -d restart 重起memcached服務

?  -d stop|shutdown 關閉正在運行的memcached服務

?  -d install 安裝memcached服務

?  -d uninstall 卸載memcached服務

?  -u 以的身份運行 (僅在以root運行的時候有效)

?  -m 最大內存使用,單位MB。默認64MB

?  -M 內存耗盡時返回錯誤,而不是刪除項

?  -c 最大同時鏈接數,默認是1024

?  -f 塊大小增加因子,默認是1.25

?  -n 最小分配空間,key+value+flags默認是48

?  -h 顯示幫助


3.  設置Memcache緩存大小和端口

Memcache的默認啓動時的參數可能不知足實際生產環境的須要,因而就想到直接修改windows服務的啓動參數,操做以下:

打開註冊表,找到:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\memcached Server

其中的ImagePath項的值爲: c:\memcached\memcached.exe" -d runservice

改爲:c:\memcached\memcached.exe" -p 12345 -m 128 -d runservice

其中,-p就是端口,-m就是緩存大小,以M爲單位。

在CentOS 5.6上編譯安裝Memcached

一、因爲memcached是基於libevent的,所以須要安裝libevent,libevent-devel

view plain    copy
  1. # yum install libevent libevent-devel -y 

二、下載並解壓memcached-1.4.5

memcached官方網站是:http://memcached.org/

view plain    copy
  1. # cd /root 
  2. # wget http://memcached.googlecode.com/files/memcached-1.4.5.tar.gz 
  3. # tar -xvzf  memcached-1.4.5.tar.gz 

三、編譯安裝memcached-1.4.5

view plain    copy
  1. # cd memcached-1.4.5 
  2. # ./configure --prefix=/etc/memcached 
  3. # make 
  4. # make install 

四、配置環境變量

進入用戶宿主目錄,編輯.bash_profile,爲系統環境變量LD_LIBRARY_PATH增長新的目錄,須要增長的內容以下:

# vi .bash_profile

view plain    copy
  1. MEMCACHED_HOME=/etc/memcached 
  2. export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MEMCACHED_HOME/lib 

刷新用戶環境變量:# source .bash_profile

五、編寫memcached服務啓停腳本

# cd /etc/init.d

vi memcached,腳本內容以下:

#!/bin/sh 
# 
# Startup script for the server of memcached 
# 
# processname: memcached 
# pidfile: /etc/memcached/memcached.pid 
# logfile: /etc/memcached/memcached_log.txt 
# memcached_home: /etc/memcached 
# chkconfig: 35 21 79 
# description: Start and stop memcached Service 
 
# Source function library 
. /etc/rc.d/init.d/functions 
 
RETVAL=0 
 
prog="memcached" 
basedir=/etc/memcached 
cmd=${basedir}/bin/memcached 
pidfile="$basedir/${prog}.pid" 
#logfile="$basedir/memcached_log.txt" 
 
# 設置memcached啓動參數 
ipaddr="192.168.1.201"          # 綁定偵聽的IP地址 
port="11211"                    # 服務端口 
username="root"                 # 運行程序的用戶身份 
max_memory=64                   # default: 64M | 最大使用內存 
max_simul_conn=1024             # default: 1024 | 最大同時鏈接數 
#maxcon=51200 
#growth_factor=1.3              # default: 1.25 | 塊大小增加因子 
#thread_num=6                   # default: 4 
#verbose="-vv"                  # 查看詳細啓動信息 
#bind_protocol=binary           # ascii, binary, or auto (default) 
 
start() { 
    echo -n $"Starting service: $prog" 
    $cmd -d -m $max_memory -u $username -l $ipaddr -p $port -c $max_simul_conn -P $pidfile 
    RETVAL=$? 
    echo 
    [ $RETVAL -eq 0 ] && touch /var/lock/subsys/$prog 
} 
 
stop() { 
    echo -n $"Stopping service: $prog  " 
    run_user=`whoami` 
        pidlist=`ps -ef | grep $run_user | grep memcached | grep -v grep | awk '{print($2)}'` 
        for pid in $pidlist 
        do 
#           echo "pid=$pid" 
            kill -9 $pid 
            if [ $? -ne 0 ]; then 
                return 1 
            fi 
        done 
    RETVAL=$? 
    echo 
    [ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/$prog 
} 
 
# See how we were called. 
case "$1" in 
    start) 
        start 
        ;; 
    stop) 
        stop 
        ;; 
    #reload) 
    #    reload 
    #    ;; 
    restart) 
        stop 
        start 
        ;; 
    #condrestart) 
    #    if [ -f /var/lock/subsys/$prog ]; then 
    #        stop 
    #        start 
    #    fi 
    #    ;; 
    status) 
        status memcached 
        ;; 
    *) 
        echo "Usage: $0 {start|stop|restart|status}" 
        exit 1 
esac 
 
exit $RETVAL 

  

設置腳本可被執行:# chmod +x memcached

六、設置memcached隨系統啓動

# chkconfig --add memcached 
# chkconfig --level 35 memcached on 

  

啓動memcached

# service memcached start 
//啓動的時候其實是調用了下面的這個命令,以守護進程的方式來啓動memcached  
/etc/memcached/bin/memcached -d -m 64 -u root -l 192.168.1.201  
\-p 11211 -c 1024 -P /etc/memcached/memcached.pid 

  

查看memcached是否啓動:

# ps -ef | grep memcached

memcached命令參數解釋

參數 參數解釋及說明
-p <num> 監聽的端口
-l <ip_addr> 鏈接的IP地址,,默認是本機。-l選項能夠不使用,此時表示在全部網絡接口地址上監聽。建議是-l <ip_addr>指定一個內部網絡IP地址,以免成爲外部網絡攻擊的對象
-d start 啓動memcached 服務
-d restart 重起memcached 服務
-d stop|shutdown 關閉正在運行的memcached 服務
-d install 安裝memcached 服務
-d uninstall 卸載memcached 服務
-u <username> 以<username>的身份運行 (僅在以root運行的時候有效)
-m <num> 最大內存使用,單位MB。默認64MB
-M 內存耗盡時返回錯誤,而不是刪除項
-c <num> 最大同時鏈接數,默認是1024
-f <factor> 塊大小增加因子,默認是1.25
-n <bytes> 最小分配空間,key+value+flags默認是48
-h 顯示幫助
相關文章
相關標籤/搜索