PHP之Memcache和Memcached
這篇文章向大家介紹的是PHP中的Memcache和Memcached ,有興趣的朋友可以看一下
**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<?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');$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
Memcached.class.php<?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(); } } }
1,即時產生快取
比較適用於類似於新聞詳情頁,第一個人進入頁面時,生成緩存,當後邊的人再進入這個頁面時,可以直接從緩存中獲取數據,並且可以給數據設置一個過期時間,這樣的話,等看這個新聞的人比較少的時候就可以及時清除緩存,這樣可以達到節約內存的目的2,提前生成緩存
這種生成緩存的方式,比較適用於訪問量比較大且資料量比較多,類似網站首頁這種情況。可以使用定時腳本的方式,提前將快取生成3,永久快取
這種快取方案比較適合於關於單獨的頁面,它的修改頻率非常低,這時可以生成永久緩存###
**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<?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');$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<?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教程
以上是PHP之Memcache和Memcached的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

熱門話題

在Web開發中,我們經常需要使用快取技術來提高網站的效能和回應速度。 Memcache是一種流行的快取技術,它可以快取任何資料類型、支援高並發和高可用性。本文將介紹如何使用PHP開發中的Memcache,並提供具體程式碼範例。一、安裝Memcache要使用Memcache,我們首先需要在伺服器上安裝Memcache擴充。在CentOS作業系統中,可以使用以下命令

隨著互聯網的發展,PHP應用程式在網路應用領域中變得越來越常見。但是,PHP應用程式的高並發存取會導致伺服器的CPU使用率高,進而影響應用程式的效能。為了優化PHP應用程式的效能,Memcached快取技術成為了一個很好的選擇。本文將介紹如何使用Memcached快取技術最佳化PHP應用程式CPU的使用率。 Memcached快取技術簡介Memcached是一

在PHP開發中,使用Memcache快取系統可以大幅提高資料讀寫的效率。 Memcache是一種基於記憶體的快取系統,它可以將資料緩存在記憶體中,避免頻繁的讀寫資料庫。本文將介紹如何在PHP中使用Memcache進行高效率的資料讀寫操作,並提供具體的程式碼範例。一、安裝和設定Memcache首先,需要在伺服器上安裝Memcache擴充。可以透過

PHP開發中如何使用Memcache進行高效率的資料寫入與查詢?隨著網路應用的不斷發展,對於系統效能的要求越來越高。在PHP開發中,為了提高系統的效能和反應速度,我們經常使用各種快取技術。而其中一個常用的快取技術就是Memcache。 Memcache是一種高效能的分散式記憶體物件快取系統,可以用來快取資料庫查詢結果、頁面片段、會話資料等。透過將資料儲存在內存

隨著Web應用程式的日益複雜,效能也成為了一個關鍵問題。在許多應用程式中,資料庫查詢是最耗費時間的操作之一。為了避免頻繁地從資料庫中讀取數據,可以使用快取系統,將經常讀取的數據儲存在記憶體中,以便快速的存取。在PHP開發中,使用Memcached進行分散式快取是一個極為常見的做法,在本文中我們將介紹如何使用Memcached進行分散式快取。什麼是Memca

如何使用Memcache優化你的PHP應用中的資料儲存操作?在網路應用開發中,資料儲存是一個至關重要的環節。而在PHP應用中,Memcache作為一種記憶體快取系統,可以有效提升資料儲存和讀取操作的效率。本文將介紹如何使用Memcache優化PHP應用中的資料儲存操作,並附上具體的程式碼範例。第一步:安裝Memcache擴充首先,你需要在PHP環境中安裝Me

PHP是一種十分流行的程式語言,常用於伺服器端的Web應用程式開發。隨著Web應用程式使用者規模的不斷增長以及資料量的不斷增大,高效的資料快取和排序操作變得越來越重要。在這種情況下,Memcache是一種非常有用的工具。本文將介紹如何在PHP開發中使用Memcache實現高效的資料快取和排序操作,並提供具體的程式碼範例。什麼是Memcache? Memcache是

隨著網路的發展,快取技術在Web開發中扮演越來越重要的角色。 Redis和Memcached作為兩種流行的快取伺服器,被廣泛應用於各種網路應用開發中。然而,對於不熟悉Linux系統的開發人員來說,安裝和設定這些快取伺服器可能會帶來一些麻煩。但是,在寶塔面板的幫助下,這個過程將變得相當簡單。一、什麼是寶塔面板?寶塔面板是一款Linux伺服器管理面板,它可以
