>  기사  >  백엔드 개발  >  PHP Memcache 및 Memcached

PHP Memcache 및 Memcached

不言
不言원래의
2018-04-26 14:46:0610477검색

이 글에서는 PHP의 Memcache와 Memcached를 소개합니다. 관심 있는 친구는 한 번 살펴보세요.

**Memcache 소개:**Memcache는 분산형 캐시 시스템이라는 의미로 Memcache 서비스를 여러 서버에 설치할 수 있다는 의미입니다. 동시에 컴퓨터에 연결하여 좋은 클러스터 효과를 얻을 수 있습니다. 속도가 빠른 것은 Memcache 데이터가 메모리에 유지되기 때문이며, 읽기 속도가 하드디스크에 저장된 데이터를 읽는 속도보다 훨씬 빠르기 때문입니다.
기능:애플리케이션의 방문 수가 많으면 데이터베이스에 대한 부담이 특히 커집니다. Memcache는 애플리케이션과 데이터베이스 사이에 버퍼 레이어를 추가할 수 있습니다. 이는 이전에 데이터베이스에서 읽은 데이터입니다. 두 번째로 읽을 때나 다음 번에 읽을 때 Memcache에 직접 액세스하여 데이터를 읽을 수 있으므로 Mysql과 같은 데이터베이스에 대한 부담을 줄일 수 있습니다.
Memcache 관리 방법: 실제로는 이해할 수 있습니다. 하나의 데이터베이스만 있는 데이터베이스 이 테이블에는 키와 값이라는 두 개의 필드가 있습니다. 값은 저장된 데이터이고 키는 검색 중 고유성을 확인하는 데 사용됩니다.
(1) 비영구적 저장: 데이터 저장에 대한 요구 사항은 높지 않습니다. 즉, 이 데이터가 손실되더라도 시스템에 전원이 공급되면 메모리가 지워지기 때문에 시스템에 큰 영향을 미치지 않습니다. 끄거나 다시 시작하면 Memcache에 저장된 데이터도 삭제됩니다. 따라서 Memcache를 실제 데이터베이스가 아닌 캐시로 사용하세요 (2) 분산 저장소: Memcache는 메모리를 많이 소모하므로 독립형 사용에는 적합하지 않습니다. Memcache를 사용하는 경우 다른 컴퓨터에 설치하는 것이 좋습니다. Memcache와 데이터베이스를 하나의 시스템에 설치하는 것이 아니라 단독으로 캐시 시스템으로 사용하는 것입니다.
(3) 키/값 저장: 형식이 단순하고 목록 및 배열 데이터 형식을 지원하지 않습니다.

Memcached와 Memcache는 두 가지 버전으로 제공됩니다. Memcache의 업그레이드 버전입니다. 속도가 빠르고 안정성이 비교적 높습니다

Memcached 설치

1, Memcache 서버 설치
(1) Libevent Memcache 컴파일 및 설치 먼저 Libevent 확장 프로그램을 설치하면 컴파일 및 설치가 가능하다는 장점이 있습니다. 컴파일 및 설치 과정에서 어떤 오류가 발생했는지 등 소프트웨어가 설치되는 위치를 지정하는 등의 설정, Linux에 대해 잘 모르는 경우에는 상대적으로 다루기가 어려울 수 있습니다. 오류가 발생함
(2) 종속성 관리 도구 yum을 사용하고, apt-get으로 설치

실제 설치: (운영 체제는 64비트 Centos입니다.)

컴파일하여 설치하려면 libevent 설치 패키지를 다운로드해야 합니다.

종속성 관리 도구를 사용하여 여기에 설치

#yum install memcached

Start 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. -end 확장 Libmemcached libmemcached 및 memcached를 다운로드하고 libmemcached의 압축을 푼다
여기에서 컴파일 및 설치하고 압축이 풀린 폴더에 들어가
실행

#./configure --prefix=/usr/lib/libmemcached然后执行#make && makeinstall

2하고 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, 플러시, 교체, 증가, 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으로 문의하세요.