首頁 後端開發 php教程 PHP之Memcache和Memcached

PHP之Memcache和Memcached

Apr 26, 2018 pm 02:46 PM
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、setdelete、 flush、replace、increment、get

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

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

test.php<?php/*系统类*/$m = new Memcached();/*添加服务器*/$m->addServer(&#39;127.0.0.1&#39;, 11211);/*添加多台服务器*/$array = array(    array(&#39;127.0.0.1&#39;, 11211),    array(&#39;127.0.0.1&#39;, 11211)
);$m->addServers($array);/*查看服务器状态*/print_r($m->getStats());/*查看服务端版本号*/print_r($m->getVersion());/*数据类*/$m->add(&#39;mkey&#39;, &#39;mvalue&#39;, 0);//第三个参数是数据存在的时间,0表示永久echo $m->get(&#39;mkey&#39;);//获取数据/*假设对同一个key值进行两次添加的话,后边的操作不会覆盖前边的value,如果想替换掉,就使用replace*/$m->replace(&#39;mkey&#39;, &#39;mvalue2&#39;);/*还可以使用set方法表添加数据,它的好处就是,当我们的数据不存在时会帮我们新建数据,如果存在,就会覆盖原值*/$m->add(&#39;mkey&#39;, &#39;mvalue&#39;, 600);/*删除数据*/$m->delete(&#39;mkey&#39;);/*清空memcache中的所有缓存*/$m->flush();/*对memcache中整形数据进行+1或+任意数值的操作*/$m->set(&#39;num&#39;, 5, 0);$m->increment(&#39;num&#39;, 5);//每次刷新页面,num自增5$m->get(&#39;num&#39;);/*自减decrement用法相同*//*下边的方法只支持Memcached,不支持Memcache*//*一次添加多条数据*///原始方法,多次使用set()//现在可以使用setMulti()$data = array(    &#39;key&#39; => &#39;value&#39;,    &#39;key1&#39;=> &#39;value1&#39;);$m->setMulti($data,0);$result = $m->getMulti(array(&#39;key&#39;,&#39;key1&#39;));//获取多条数据print_r($result);//删除多条数据$m->deleteMulti(array(&#39;key&#39;,&#39;key1&#39;));//返回上一次操作返回的编码(数字的形式存在) 可以到手册中查看每一个编码的含义 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 = &#39;Memcached&#39;;//考虑到扩展性,实例化的可能是Memcache也可能是Memcached
    private $m;    private $time = 0;    private $error;    private $debug = &#39;true&#39;;    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=&#39;&#39;, $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,永久快取

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

**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、setdelete、flush、replace、increment、get
进阶类:setMulti、deleteMulti、getMulti、getResultCode、getResultMessage
更多关于memecached的操作,可以到php官网查看(php.net)

test.php<?php/*系统类*/$m = new Memcached();/*添加服务器*/$m->addServer(&#39;127.0.0.1&#39;, 11211);/*添加多台服务器*/$array = array(    array(&#39;127.0.0.1&#39;, 11211),    array(&#39;127.0.0.1&#39;, 11211)
);$m->addServers($array);/*查看服务器状态*/print_r($m->getStats());/*查看服务端版本号*/print_r($m->getVersion());/*数据类*/$m->add(&#39;mkey&#39;, &#39;mvalue&#39;, 0);//第三个参数是数据存在的时间,0表示永久echo $m->get(&#39;mkey&#39;);//获取数据/*假设对同一个key值进行两次添加的话,后边的操作不会覆盖前边的value,如果想替换掉,就使用replace*/$m->replace(&#39;mkey&#39;, &#39;mvalue2&#39;);/*还可以使用set方法表添加数据,它的好处就是,当我们的数据不存在时会帮我们新建数据,如果存在,就会覆盖原值*/$m->add(&#39;mkey&#39;, &#39;mvalue&#39;, 600);/*删除数据*/$m->delete(&#39;mkey&#39;);/*清空memcache中的所有缓存*/$m->flush();/*对memcache中整形数据进行+1或+任意数值的操作*/$m->set(&#39;num&#39;, 5, 0);$m->increment(&#39;num&#39;, 5);//每次刷新页面,num自增5$m->get(&#39;num&#39;);/*自减decrement用法相同*//*下边的方法只支持Memcached,不支持Memcache*//*一次添加多条数据*///原始方法,多次使用set()//现在可以使用setMulti()$data = array(    &#39;key&#39; => &#39;value&#39;,    &#39;key1&#39;=> &#39;value1&#39;);$m->setMulti($data,0);$result = $m->getMulti(array(&#39;key&#39;,&#39;key1&#39;));//获取多条数据print_r($result);//删除多条数据$m->deleteMulti(array(&#39;key&#39;,&#39;key1&#39;));//返回上一次操作返回的编码(数字的形式存在) 可以到手册中查看每一个编码的含义 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 = &#39;Memcached&#39;;//考虑到扩展性,实例化的可能是Memcache也可能是Memcached
    private $m;    private $time = 0;    private $error;    private $debug = &#39;true&#39;;    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=&#39;&#39;, $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中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

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

如何使用PHP開發中的Memcache? 如何使用PHP開發中的Memcache? Nov 07, 2023 pm 12:49 PM

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

如何使用Memcached快取技術優化PHP應用程式CPU的使用率? 如何使用Memcached快取技術優化PHP應用程式CPU的使用率? Jun 21, 2023 pm 05:07 PM

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

PHP開發中如何使用Memcache進行高效率的資料讀寫操作? PHP開發中如何使用Memcache進行高效率的資料讀寫操作? Nov 07, 2023 pm 03:48 PM

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

PHP開發中如何使用Memcache進行高效率的資料寫入與查詢? PHP開發中如何使用Memcache進行高效率的資料寫入與查詢? Nov 07, 2023 pm 01:36 PM

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

PHP開發中如何使用Memcache進行分散式快取? PHP開發中如何使用Memcache進行分散式快取? Nov 07, 2023 pm 03:04 PM

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

如何使用Memcache優化你的PHP應用中的資料儲存操作? 如何使用Memcache優化你的PHP應用中的資料儲存操作? Nov 08, 2023 pm 09:06 PM

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

PHP開發中如何使用Memcache實現高效的資料快取和排序操作? PHP開發中如何使用Memcache實現高效的資料快取和排序操作? Nov 07, 2023 pm 02:28 PM

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

使用寶塔面板進行Redis、Memcached等快取伺服器的部署 使用寶塔面板進行Redis、Memcached等快取伺服器的部署 Jun 21, 2023 am 09:56 AM

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

See all articles