Memcached筆記

Memcached的基本概念
php

是一種緩存技術(內存), 你能夠把它想象成一張巨大的內存表:形式[他就是一個服務]mysql

key                    val linux

key(字符串)         能夠放(字符串【二進制數據[視頻、音頻、圖片],數值,數組,對象,)算法


安裝memcache服務sql

步驟數據庫

1. 下載apache

2. 安裝json

 

卸載 memcached.exe d uninstall   (-d  daemon 後臺程序)windows

中止服務 memcahced.exe d stop 數組

安裝 memcached d install 

 

3. 測試是否安裝成功

啓動 

memcached d start 

咱們使用 

netstat an   看看是否有 11211 端口在監聽,若是在監聽,則說明成.

netstat anb  (b 能夠顯示 是哪一個程序在監聽這個端口.)

若是如今,我要殺掉這個程序 ,windows 下  可使用任務管理器殺死.

linux  kill -9 進程號         killall 進程名 

 

大部分同窗安裝Ok, 只有是xpok,

win7 的同窗有一部分沒有ok

a. 把 memcached.exe 放在 中文目錄 這樣不行

b. 安裝使用的是 普通用戶, 你要切換成 administror   ctrl+alt+delete

 

 

如何操做memcached 服務.

學習如何完成crud操做! (任務驅動 |  )

 

telnet 的具體使用

a. 登陸到telnet 

語法 

telnet ip 端口 

 

登陸到  11211 端口 

telnet 127.0.0.1 11211 

 

如何對mem進行 curd 操做

 

添加

add key1  0  60  5

 

說明  key1 表示 鍵值 ,能夠本身指定

表示一個格式, 不變

60 存放在mem多長時間

表示存放的數據是多少個字節

 

查詢

get 鍵值

舉例

get hsp1 

說明若是 hsp1 不存在,或是是由於時間到而被 memcache 刪除了,將獲得空.

 

修改

有兩種方法

 

replace 鍵值  時間 大小  【這裏有一個注意事項,該鍵值必須存在】

舉例:

replace hsp1 0 40 8

 

第二種方法:

set 鍵值 時間 大小 【若是這個鍵存在,則替換,若是不存在,則表示添加一個新的鍵值】

 

案例

set hsp1 0 60 5 

 

刪除 

 

語法

delete 鍵值

如今,若是咱們在mem服務中,須要作一個計數器(存放值必定是一個數),怎麼辦?

 

key          val

counter        0

add counter 0 0 100

incr key 數字

 

telnet使用ok!

 

如何使用memcache 的擴展來操做memcached  服務 

(1) 把 php_memcache.dll  拷貝 ~php/ext/目錄

(2) 在 php.ini 中添加一句話

;引入php_memcache.dll

extension=php_memcache.dll

(3) 使用 PHP 程序 curd

<?php

 

//建立對象

$mem=new Memcache;

//鏈接到mem服務器

$mem->connect("127.0.0.1",11211);

//添加,該函數返回true

 

if($mem->add("hsp1","china",MEMCACHE_COMPRESSED,60)){


echo "添加ok";

}else{

echo "添加err";

}

 

//查詢

 

$val=$mem->get("hsp1");

echo "val=$val";

echo "<br/>";

//修改 replace  set

if($mem->replace("hsp1","hello,world",MEMCACHE_COMPRESSED,60)){

echo "replace ok";

}else{

echo "replace 失敗";

}

echo "<br/>";

//set 若是存在就替換,不存在,就添加

if($mem->set("hsp1","hello,world , 你好!",MEMCACHE_COMPRESSED,60)){

echo "set ok";

}else{

echo "set 失敗";

}

 

echo "<br/>";

//刪除

if($mem->delete("hsp1")){

echo "刪除ok";


}

 

(4) 談談細節,增強

討論memcache中什麼數據類型能夠放入字符串 ,數字 ,數組對象 ,資源

 

 

當咱們在mem中存取對象是,在取的時候,咱們須要在前面引入這個類的聲明.

 

把這個代碼:

<?php

 

//放入數組

$arr=array("1"=>"beijing","2"=>"天津");

//數組默認是序列號 

if($mem->add("city2",json_encode($arr),MEMCACHE_COMPRESSED,60)){

echo "city ok";

}else{

echo "city fail";

}


 

//對象

class Dog{

public $age;

public $color;

public function __construct($age,$color){

$this->age=$age;

$this->color=$color;

}

}

 

$dog1=new Dog(30,"紅色");

 

if($mem->add("dog1",$dog1,MEMCACHE_COMPRESSED,60)){

echo "dog1 ok";

}else{

echo "dog1 fail";

}

echo "<br/>";

$mydog=$mem->get("dog1");

echo $mydog->age;

var_dump($mydog);

 

$con=mysql_connect("localhost","root","root");

echo "<br/>";

if($con){

//放入mem

if($mem->add("conn",$con,MEMCACHE_COMPRESSED,160)){

echo "資源添加ok";


}else{

echo "資源添加失敗";

}

}


工做環境: apache 的 httpd.conf 文件 php.ini 文件是有其餘人來管理,你沒有權利去修改這些配置文件,可是你還但願去使用memcached 

 

解決方法咱們使用原生態的代碼來完成.->這裏咱們能夠直接使用 

咱們能夠把 memcached-clinet.php 引入到咱們的項目中,而後我就能夠直接來完成了.

 

代碼完成 crud操做.

① 先關閉 extension

② 咱們寫mem4.php 並引入咱們的 memcached-clinet.php 通常說全部的技術文檔,都會給你一個案例,因此你照這個案例能夠快速使用

<?php

 

//直接使用函數來操做咱們的memcached

 

include "memcached-client.php";

 

 $mc = new memcached(

array(

              'servers' => array('127.0.0.1:11211'),

               'debug'   => false,

               'compress_threshold' => 10240,

               'persistant' => true));

//添加 【這裏仍然支持添加 數組,對象,數值 】

   if($mc->set('hsp1', "你好!北京!",60)){

echo "ok";

   }else{

   echo "fail!";

   }

   //獲取

   $val=$mc->get("hsp1");

   echo "<br/>"."val=$val";

 

   //修改 直接使用set函數,就是 replace

   if($mc->replace("hsp1","北京",30)){

   echo "<br/>修改爲功!";

   }else{

  echo "<br/>修改fail!";

   }


 

 

 //獲取

   $val=$mc->get("hsp1");

 //  echo "<br/>"."修改後 val=$val";


if(is_array($val)){


echo "<pre>";

print_r($val);

echo "</pre>";

}else if(is_float($val)){

 

echo "<br/>"."修改後 val=$val";


}else if(is_string($val)){

 

echo "<br/>"."修改後 val=$val";


}

 

   //刪除

 

/*  if($mc->delete("hsp1")){

   echo "<br/>刪除成功!";

   }else{

  echo "<br/>刪除fail!";

   }*/

 

關於memcache的機制

1. 是基於 c/s 2. 底層的協議是 普通文本

2. 是基於 libevent機制處理

3. memcache的數據是放在內存

4. memcache自己支持 LRU 算法      

[算法/網絡/數據庫/操做系統+編譯原理 pl0[if + -]] 

5. 基於客戶端分佈式.示意圖

spacer.gif 

 

memcache細節

1. 生命週期

數據的生命週期是指定的,只有把數據放入就開始計時,只要時間到,就銷燬.

session(1440s)  若是你沒有關閉瀏覽器,而且沒有使用session 1440後銷燬

1439使用一次這個sesion ,又開始從新計時.

2. 如何把session 放入memcache服務器

sesion 垃圾回收的機率是 session.gc_probability/ session.gc_divisor 

步驟

(1) 由於session 默認是放在文件中, windows下 c:/windows/Temp

(2) 從新配置php.ini 把關於session配置修

session.save_handler = memcache

修改路徑

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

 

(3) 若是咱們不去修改php.ini 也達到這樣的效果

可使用 ini_set 函數來玩

 

代碼:

 

<?php

 

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

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

  session_start();

  $_SESSION['name']="shunping";

 

  echo "<br/>存放sesionok";

  echo "<br/>session_id=".session_id();

  //取出

  $val=$_SESSION['name'];

  echo "<br/>session name=".$val;

 

(4) memcache是無用戶狀態,也就是說,是全部用戶共享的數據

(5) 安全性.

windows. 下咱們使用防火牆  同時 打開 80端口. , 只讓咱們本身 php程序去操做咱們的memached服務。這樣咱們的memcache就安全,

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

 

總結:

--我本身的一個小結如何決定是否使用memcached

--若是是一個小網站,pv(page view)值不大,就不考慮使用memcache

--變化頻繁,查詢頻繁,可是不必定寫入數據庫(適合memcache)

--變化頻繁一變化就要入庫[好比股票,金融.](不適合memcache)

 

 

memcache 和 session 對比

1. memcache 放入內存,session默認放入文件,可是經過配置,也能夠入memcached

2. 生命週期 (memcahce 數據一旦建立就開始時間,到時就銷燬  , session 建立後計時,可是若是在沒有成垃圾前,你又使用過一次,則從新計算)

3. 解決的問題不同 memcache爲了提高速度 , session 是用於追蹤用戶的行爲

相關技術  Redis  也是 key/value 一種緩存技術.

相關文章
相關標籤/搜索