本篇文章向大家介绍的是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
这里使用依赖管理工具安装

  1. #yum install memcached

启动memcached

  1. #/usr/bin/memcached -d -l 127.0.0.1 -p 11211 -m 150 -u root
  2. /*-d:守护进程的模式启动。守护进程就是,当你从终端窗口推出之后,程序依然进行
  3. -l:指定IP地址
  4. -p:指定端口号
  5. -m:为memcached分配多少内存,这里是以M为单位
  6. -u:以哪个身份去启动memcached(线上的时候最好不要用超级管理员用户)*/

可以使用ps查看memcached进程是否启动

  1. #ps -ef | grep memcached

2,Memcache客户端的安装
1,安装前置扩展Libmemcached
下载好libmemcached和memcached,对libmemcached进行解压
这里使用编译安装,进入解压出来的文件夹
执行

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

2,为php安装memcached扩展
解压memcached,进入到解压目录当中
使用phpize的方式安装memcached扩展

  1. #phpize此时就会做出一个configure的文件
  2.  
  3. #./configure --with-php-config=/usr/local/php/bin/php-config --with-libmemcached-dir=/usr/lib/libmemcached-sasl
  4.  
  5. 后边是指定php的配置文件和刚安装的libmemcached的位置,大家根据自己的配置文件路径进行填写
  6.  
  7. #make#make install
  8.  
  9. 执行完make install之后,我们会看见一个扩展目录,将该路径添加到php配置文件中php.ini中加入
  10. extension=memcached.so
  11. 然后重启服务器环境,查看php扩展
  12. #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)

  1. test.php
  1. <?php
  2. /*系统类*
  3. /$m = new Memcached();
  4. /*添加服务器*/
  5. $m->addServer('127.0.0.1', 11211);
  6. /*添加多台服务器*/
  7. $array = array( array('127.0.0.1', 11211), array('127.0.0.1', 11211));
  8. $m->addServers($array);
  9. /*查看服务器状态*/
  10. print_r($m->getStats());
  11. /*查看服务端版本号*/
  12. print_r($m->getVersion());
  13. /*数据类*/
    $m->add('mkey', 'mvalue', 0);
  14. //第三个参数是数据存在的时间,0表示永久
  15. echo $m->get('mkey');
  16. //获取数据
  17. /*假设对同一个key值进行两次添加的话,后边的操作不会覆盖前边的value,如果想替换掉,就使用replace*/
  18. $m->replace('mkey', 'mvalue2');
  19. /*还可以使用set方法表添加数据,它的好处就是,当我们的数据不存在时会帮我们新建数据,如果存在,就会覆盖原值*/
  20. $m->add('mkey', 'mvalue', 600);
  21. /*删除数据*/$m->delete('mkey');
  22. /*清空memcache中的所有缓存*/
  23. $m->flush();
  24. /*对memcache中整形数据进行+1或+任意数值的操作*/
  25. $m->set('num', 5, 0);$m->increment('num', 5);
  26. //每次刷新页面,num自增5
  27. $m->get('num');
  28. /*自减decrement用法相同*/
  29. /*下边的方法只支持Memcached,不支持Memcache*/
  30. /*一次添加多条数据*/
  31. //原始方法,多次使用set()
  32. //现在可以使用setMulti()
  33. $data = array( 'key' => 'value', 'key1'=> 'value1');
  34. $m->setMulti($data,0);
  35. $result = $m->getMulti(array('key','key1'));
  36. //获取多条数据
  37. print_r($result);
  38. //删除多条数据$m->deleteMulti(array('key','key1'));
  39. //返回上一次操作返回的编码(数字的形式存在) 可以到手册中查看每一个编码的含义
  40. echo $m->getResultCode();
  41. //比如 成功 返回0
  42. //获取操作结果
  43. echo $m->getResultMessage();
  44. //比如 成功 返回SUCCESS

封装一个自己的Memcache类

  1. Memcached.class.php
  1. <?php/*
  2.  
  3. 封装自己的Memcached类
  4.  
  5. 1,扩展性
  6.  
  7. 2,可调性
  8.  
  9. 3,尽量简便的操作,一个方法多种功能
  10.  
  11. *//*
  12.  
  13. 通过一个s()方法实现set()、get()、delete()操作
  14.  
  15. set s($key,$value,$time)
  16.  
  17. get s($key)
  18.  
  19. delete s($key,NULL)
  20.  
  21. */class Mem
  22.  
  23. { private $type = 'Memcached';//考虑到扩展性,实例化的可能是Memcache也可能是Memcached
  24.  
  25. private $m; private $time = 0; private $error; private $debug = 'true'; public function __construct()
  26.  
  27. { if(!class_exists($this->type)){ $this->error="No ".$this->type; return false;
  28.  
  29. }else{ $this->m=new $this->type;
  30.  
  31. }
  32.  
  33. } //添加服务器
  34.  
  35. public function addServer($arr)
  36.  
  37. { $this->m->addServers($arr);
  38.  
  39. } public function s($key, $value='', $time=NULL)
  40.  
  41. { $number = func_num_args();//该函数用来判断传递过来了几个参数
  42.  
  43. if($number == 1){ return $this->get($key);
  44.  
  45. }else if($number >= 2){ if($value === NULL){//一定要使用“全等于”,因为如果不是全等于,传递过来0也会通过
  46.  
  47. $this->delete($key);
  48.  
  49. }else{ $this->set($key, $value, $time);
  50.  
  51. }
  52.  
  53. }
  54.  
  55. } private function set($key, $value, $time=NULL)
  56.  
  57. { if($time === NULL) $time = $this->time(); $this->m->set($key, $value, $time); if($this->debug){ if($this->m->getResultCode() != 0){ return false;
  58.  
  59. }
  60.  
  61. }
  62.  
  63. } private function get($key){ $result = $this->m->get($key); if($this->debug){ if($this->m->getResultCode() != 0){ return false;
  64.  
  65. }
  66.  
  67. } return $result;
  68.  
  69. } private function delete($key)
  70.  
  71. { $this->m->delete($key);
  72.  
  73. } public function getError()
  74.  
  75. { if($this->error){ return $this->error();
  76.  
  77. }else{ return $this->m->getResultMessage();
  78.  
  79. }
  80.  
  81. }
  82.  
  83. }

项目中使用Memcache
1,即时生成缓存
比较适用于类似于新闻详情页,第一个人进入页面时,生成缓存,当后边的人再进入这个页面时,可以直接从缓存中获取数据,并且可以给数据设置一个过期时间,这样的话,等看这个新闻的人比较少的时候就可以及时清除缓存,这样可以达到节约内存的目的
2,提前生成缓存
这种生成缓存的方式,比较适用于访问量比较大且数据量比较多,类似于网站首页这种情况。可以使用定时脚本的方式,提前将缓存生成
3,永久缓存
这种缓存方案比较适合于关于单独的页面,它的修改频率非常低,这时可以生成永久缓存

相关推荐:

php模块memcache和memcached区别分析_PHP教程

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

PHP之Memcache和Memcached的更多相关文章

  1. memcache与memcached的区别

    其实到底说成什么无所谓,只要你真正理解和知道使用就可以了!但是介于有和我一样学习时遇到的这个疑惑,在此分享下其中的缘由: Memcache是一个软件 Memcache是一个自由和开放源代码.高性能.分 ...

  2. memcache与memcached介绍及安装配置

    也许大家一看到Memcache和Memcached会有点晕,这两者有什么关系又有什么区别呢,下面先给大家说下Memcached,Memcached是一个高性能的分布式内存对象缓存系统,用于动态Web应 ...

  3. memcache与memcached扩展的区别

    一.服务端 之前理解错误了.服务端只有一个memcache,一般把服务端称作memcached(带d),是因为守护进程的名称就是叫做memcached(一个这样的执行程序文件). 编写的语言:c语言 ...

  4. memcache、memcached、groupcache的区别

    对PHP语言来说,PHP使用memcache有两个模块,分别叫memcache和memcached,他们的区别看下表: 参考:http://hi.baidu.com/tony_wd/item/605e ...

  5. 谈memcache和memcached的区别

    用了段时间的memcache和memcached总结下认识,看很多人在用cache的时候,刚刚都没有搞清楚memcache 和 memcached的区别,还有就是使用的时候基本都是 get/set   ...

  6. PHP与memcache和memcached以及安装使用

    老规则,在作者寒冰讲之前我们要来明确memcache与memcached这两个东西到底是什么? 说法一: 两个不同版本的php的memcached的客户端 new memcache是pecl扩展库版本 ...

  7. php模块memcache和memcached区别分析

    zm总结:尽量使用memcached就好了 1.目前大多数php环境里使用的都是不带d的memcache版本,这个版本出的比较早,是一个原生版本,完全在php框架内开发的.与之对应的带d的memcac ...

  8. memcache和memcached之间的区别和联系

    memcache和memcached区别: Memcache是什么?Memcache是一个自由和开放源代码.高性能.分配的内存对象缓存系统.用于加速动态web应用程序,减轻数据库负载.它可以应对任意多 ...

  9. 【Linux】memcache和memcached的自动安装

    赶时间所以写一个简单的一个脚本,没有优化,想优化的可以学习下shell,自己优化下. 且行且珍惜,源码包+脚本领取处 链接:https://pan.baidu.com/s/1wIFR1wY-luDKs ...

  10. php session保存到memcache或者memcached中

    本教程叫你如何将php 的session存储在 memcached中,参考了好多网页,发现错误百出,最后自己还是测试成功了,现在将结果结果分享. 1-)系统环境 : elastix2.4 (cento ...

随机推荐

  1. Java 面向对象(七)多态

    一.多态概述(Polymorphism) 1.引入 多态是继封装.继承之后,面向对象的第三大特性. 通过不同的事物,体现出来的不同的形态.多态,描述的就是这样的状态.如跑的动作,每个动物的跑的动作就是 ...

  2. XCode5环境下利用crash log调试线上Crash的流程

    1.前言 本文主要介绍在XCode5环境下,如何根据App自己生成的crashlog来调试真机上运行时产生的crash问题. 2. 步骤 (1)构造一段会crash的代码,并放到viewDidLoad ...

  3. vue路由(一)

    “vue.js 路由允许我们通过不同的 URL 访问不同的内容.通过 Vue.js 可以实现多视图的单页Web应用(single page web application,SPA)”这段是从网上直接抄 ...

  4. bootstrap下拉框保持打开

    $(".dropdown-menu li").on("click", function (e) { e.stopPropagation(); }); 停止传播事 ...

  5. 开源证书检查工具:fossy(fossology)

    工具下载: https://github.com/fossology/fossology 其他说明: http://archive15.fossology.org/projects/fossology ...

  6. 【2017-07-03】CSS实现父级div透明,子集不透明。

    父级背景色 background: rgba(0, 0, 0, 0.5);

  7. 详解分布式系统里session同步

    1.什么是session?什么又是cookie?他俩有啥联系和区别? 2.为什么要在多台服务器间进行session的共享同步? 3.以及有哪些方法来实现这个同步? 大家快搬板凳,老王开始扯淡咯~ 1. ...

  8. webpack中typeScript的打包配置

    2018年typescript发展的非常好,js是一门非常灵活的语言,所以一个功能,怎么写都能够写出来,但是这也会导致一个问题,不同人写js的方式不同,那么会导致同一个功能出现的代码风格会迥然不同.这 ...

  9. notify()和 notifyAll()有什么区别?(未完成)

    notify()和 notifyAll()有什么区别?(未完成)

  10. (二)AppScan使用教程

    1.新建扫描:一般选择 常规扫描 2.选择扫描的平台:web或app 3.扫描配置向导 ①配置URL和服务器 ②配置登录管理 在扫描的过程中,可能会不小心碰到退出按钮导致Appscan注销.因此,要登 ...