PHP之Memcache和Memcached

      網友投稿 836 2025-04-03

      本篇文章向大家介紹的是PHP中的memcachememcached ,有興趣的朋友可以看一下

      **memcache介紹:**Memcache是一套分布式緩存系統,分布式就是說可以在多臺服務器上同時安裝Memcache服務,這樣可以達到很好的集群效果。高速,是因為Memcache數據都是維護在內存中的,它的讀取速度比存儲在硬盤中的數據的讀取速度要快很多。

      作用:當我們的應用訪問量比較大的時候,數據庫的壓力也會特別大,Memcache可以在應用和數據庫之間增加一個緩沖層,就是我們之前從數據庫中已經讀取到的數據,我們第二次或者是接下來再讀取的時候,就可以直接訪問Memcache去讀取這些數據,從而減輕Mysql等等數據庫的壓力

      怎樣理Memcache:其實可以理解成,它是一個只有一張表的數據庫,這張表有兩個字段,分別是key和value,value是保存的數據,key就是這個數據的ID,用來保證查找時的唯一性

      使用場景:

      (1)非持久化存儲:對數據存儲要求不高,也就是說,如果這份數據丟失,也不會對系統造成太大的影響,因為當系統斷電或被重啟后內存會被清空掉,那么之前保存在Memcache中的數據也會被清空掉。所以要把Memcache當作緩存使用,而不要當成真正的數據庫

      (2)分布式存儲:不適合單機使用,因為Memcache對內存的消耗很大,如果使用Memcache,推薦將其安裝在另外一臺機器上單獨作為緩存系統,而不要把Memcache和數據庫都裝到一臺機器。

      (3)Key/Value存儲:格式簡單,不支持List、Array數據格式

      memcached和Memcache是兩個版本,推薦Memcached,它有更多的改進和功能函數,是Memcache的升級版本,速度和穩定性都比較高

      安裝Memcached

      1,Memcache服務端的安裝

      (1)編譯安裝,Libevent Memcache

      先安裝Libevent這個擴展,編譯安裝的好處就是可以在安裝的過程進行一些自定義的設置,比如指定軟件安裝在哪兒,比如編譯安裝過程出現了哪些錯誤,而對Linux了解不是特別多的情況下,你可能處理錯誤的時候就會相對困難

      (2)使用依賴管理工具yum、apt-get進行安裝

      實際安裝:(操作系統是64位的Centos)

      如果要編譯安裝,需要將安裝包提前下載下來libevent、memcached

      這里使用依賴管理工具安裝

      #yum install memcached

      啟動memcached

      #/usr/bin/memcached -d -l 127.0.0.1 -p 11211 -m 150 -u root

      /*-d:守護進程的模式啟動。守護進程就是,當你從終端窗口推出之后,程序依然進行

      -l:指定IP地址

      -p:指定端口號

      -m:為memcached分配多少內存,這里是以M為單位

      -u:以哪個身份去啟動memcached(線上的時候最好不要用超級管理員用戶)*/

      可以使用ps查看memcached進程是否啟動

      #ps -ef | grep memcached

      2,Memcache客戶端的安裝

      1,安裝前置擴展Libmemcached

      下載好libmemcached和memcached,對libmemcached進行解壓

      這里使用編譯安裝,進入解壓出來的文件夾

      執行

      #./configure --prefix=/usr/lib/libmemcached

      然后執行

      #make && makeinstall

      2,為php安裝memcached擴展

      解壓memcached,進入到解壓目錄當中

      使用phpize的方式安裝memcached擴展

      #phpize此時就會做出一個configure的文件

      #./configure --with-php-config=/usr/local/php/bin/php-config --with-libmemcached-dir=/usr/lib/libmemcached-sasl

      后邊是指定php的配置文件和剛安裝的libmemcached的位置,大家根據自己的配置文件路徑進行填寫

      #make#make install

      執行完make install之后,我們會看見一個擴展目錄,將該路徑添加到php配置文件中php.ini中加入

      extension=memcached.so

      然后重啟服務器環境,查看php擴展

      #php -m | grep memecached

      在PHP中使用memcached

      系統類:addServer、addServers、getStats、getVersion

      數據類:add、set、delete、flush、replace、increment、get

      進階類:setMulti、deleteMulti、getMulti、getResultCode、getResultMessage

      更多關于memecached的操作,可以到php官網查看(php.net)

      test.php

      /*系統類*

      /$m = new Memcached();

      /*添加服務器*/

      $m->addServer('127.0.0.1', 11211);

      /*添加多臺服務器*/

      $array = array( array('127.0.0.1', 11211), array('127.0.0.1', 11211));

      $m->addServers($array);

      /*查看服務器狀態*/

      print_r($m->getStats());

      /*查看服務端版本號*/

      print_r($m->getVersion());

      /*數據類*/$m->add('mkey', 'mvalue', 0);

      //第三個參數是數據存在的時間,0表示永久

      echo $m->get('mkey');

      //獲取數據

      /*假設對同一個key值進行兩次添加的話,后邊的操作不會覆蓋前邊的value,如果想替換掉,就使用replace*/

      $m->replace('mkey', 'mvalue2');

      /*還可以使用set方法表添加數據,它的好處就是,當我們的數據不存在時會幫我們新建數據,如果存在,就會覆蓋原值*/

      $m->add('mkey', 'mvalue', 600);

      /*刪除數據*/$m->delete('mkey');

      /*清空memcache中的所有緩存*/

      $m->flush();

      /*對memcache中整形數據進行+1或+任意數值的操作*/

      $m->set('num', 5, 0);$m->increment('num', 5);

      //每次刷新頁面,num自增5

      $m->get('num');

      /*自減decrement用法相同*/

      /*下邊的方法只支持Memcached,不支持Memcache*/

      /*一次添加多條數據*/

      //原始方法,多次使用set()

      //現在可以使用setMulti()

      $data = array( 'key' => 'value', 'key1'=> 'value1');

      PHP之Memcache和Memcached

      $m->setMulti($data,0);

      $result = $m->getMulti(array('key','key1'));

      //獲取多條數據

      print_r($result);

      //刪除多條數據$m->deleteMulti(array('key','key1'));

      //返回上一次操作返回的編碼(數字的形式存在) 可以到手冊中查看每一個編碼的含義

      echo $m->getResultCode();

      //比如 成功 返回0

      //獲取操作結果

      echo $m->getResultMessage();

      //比如 成功 返回SUCCESS

      封裝一個自己的Memcache類

      Memcached.class.php

      封裝自己的Memcached類

      1,擴展性

      2,可調性

      3,盡量簡便的操作,一個方法多種功能

      *//*

      通過一個s()方法實現set()、get()、delete()操作

      set s($key,$value,$time)

      get s($key)

      delete s($key,NULL)

      */class Mem

      { private $type = 'Memcached';//考慮到擴展性,實例化的可能是Memcache也可能是Memcached

      private $m; private $time = 0; private $error; private $debug = 'true'; public function __construct()

      { if(!class_exists($this->type)){ $this->error="No ".$this->type; return false;

      }else{ $this->m=new $this->type;

      }

      } //添加服務器

      public function addServer($arr)

      { $this->m->addServers($arr);

      } public function s($key, $value='', $time=NULL)

      { $number = func_num_args();//該函數用來判斷傳遞過來了幾個參數

      if($number == 1){ return $this->get($key);

      }else if($number >= 2){ if($value === NULL){//一定要使用“全等于”,因為如果不是全等于,傳遞過來0也會通過

      $this->delete($key);

      }else{ $this->set($key, $value, $time);

      }

      }

      } private function set($key, $value, $time=NULL)

      { if($time === NULL) $time = $this->time(); $this->m->set($key, $value, $time); if($this->debug){ if($this->m->getResultCode() != 0){ return false;

      }

      }

      } private function get($key){ $result = $this->m->get($key); if($this->debug){ if($this->m->getResultCode() != 0){ return false;

      }

      } return $result;

      } private function delete($key)

      { $this->m->delete($key);

      } public function getError()

      { if($this->error){ return $this->error();

      }else{ return $this->m->getResultMessage();

      }

      }

      }

      項目中使用Memcache

      1,即時生成緩存

      比較適用于類似于新聞詳情頁,第一個人進入頁面時,生成緩存,當后邊的人再進入這個頁面時,可以直接從緩存中獲取數據,并且可以給數據設置一個過期時間,這樣的話,等看這個新聞的人比較少的時候就可以及時清除緩存,這樣可以達到節約內存的目的

      2,提前生成緩存

      這種生成緩存的方式,比較適用于訪問量比較大且數據量比較多,類似于網站首頁這種情況。可以使用定時腳本的方式,提前將緩存生成

      3,永久緩存

      這種緩存方案比較適合于關于單獨的頁面,它的修改頻率非常低,這時可以生成永久緩存

      相關推薦:

      php模塊memcache和memcached區別分析_PHP教程

      原文:http://www.php.cn/php-weizijiaocheng-391225.html

      Memcached PHP

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:如何在在WPS中對表格標題和樣式進行設置(wps標題表格格式怎么設置)
      下一篇:excel使用求積公式的方法(excel表中求積的公式)
      相關文章
      亚洲成年人电影在线观看| 亚洲一区在线观看视频| 亚洲国产理论片在线播放| 亚洲精品无码不卡在线播HE| 亚洲AⅤ无码一区二区三区在线 | 亚洲国产欧美日韩精品一区二区三区 | 亚洲av成人一区二区三区| 久久国产亚洲精品无码| 亚洲男人天堂2017| 亚洲AV永久青草无码精品| 亚洲成a人片在线观看日本| 亚洲精品无码久久久久sm| 国产亚洲av人片在线观看| 国产亚洲精品久久久久秋霞| 亚洲最大av无码网址| 在线亚洲精品自拍| 亚洲日韩欧洲无码av夜夜摸| 久久久青草青青国产亚洲免观 | 亚洲av日韩精品久久久久久a| 亚洲av永久中文无码精品| 亚洲一区二区三区久久| 亚洲欧洲校园自拍都市| 亚洲色图综合网站| 亚洲国产精品日韩在线观看 | 亚洲中文字幕乱码熟女在线| 亚洲中文字幕无码一去台湾| 亚洲色欲色欲www| 亚洲综合久久精品无码色欲| 亚洲人精品亚洲人成在线| 亚洲精品永久在线观看| 日韩欧美亚洲中文乱码| 亚洲成片观看四虎永久| 亚洲精品视频在线看| 亚洲精品制服丝袜四区| 亚洲国产成人久久综合碰碰动漫3d| 亚洲宅男永久在线| 亚洲国产成人手机在线电影bd| 国产亚洲sss在线播放| 亚洲aⅴ天堂av天堂无码麻豆| 亚洲AV永久无码精品一区二区国产| 亚洲人成无码www久久久|