Memcache的一些学习

首先,Memcache是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提供动态、数据库驱动网站的速度,再特别强调下:Memcache 是一个用来存储常用信息的缓存,有了它,您便无需从缓慢的资源,比如磁盘或数据库,加载并处理信息了。

Memcache的配置:
  1. 安装,配置Memcache,中间磕磕碰碰还是有遇到一些小问题的。
  2. 1、下载一个稳定版本的Memcache,点我下载.找个最新版本的pecl压缩包,并放到某个盘下,并通过cmd控制台启动,必须要管理员身份,不然报错(我开始就报错过 - -),安装命令:c:/Memcache.exe d install
  3. 然后再打:c:/Memcache.exe d start,启动服务
  4. 2、第二步,根据自身PHP版本,寻找对应的php_Memcache.dll并下载(重要,开始随便下了个,就无法使用Memcache,各种报错),我的PHP5.4.4版本(http://huangqiqing123.iteye.com/blog/1682857),并放到PHP中的ext并在php.info配置文件下加一句话:extension=php_memcache.dll
  5. 3、最后可以测试使用Memcache了,重启apache,打印phpinfo()信息,搜索Memcache,是否存在,再创建一个php文件:<?php $mem = new memcache; //实例化     $mem->connect(‘192.168.0.124’,11211) or die (“链接失败”);   //192.168.0.124(服务器地址,本地可用localhost)11211(端口号)
    echo $mem->getVersion();                                //获得版本信息,使用echo输出?>
  1. 我的打印结果是:1.2.6
Memcache简单示例:
  1. Hello World
  2. $mems = new memcache;
  3. $mems->connect('localhost',11211) or die ("链接失败");
  4. $mems->set(‘test’,’Hello World!’);
  5. Echo $mems->get(‘name’);
  6. 实际应用:先创建一个MyMemcache.php,代码如下:
  7. class MyMemcache extends memcache{
  8. function __construct(){
  9. memcache::addServer('localhost',11211)or die ("链接失败");}}
  10. $mems = new MyMemcache();
  11. 再在需要的时候包含进来,例如:在memcache_set页面中:
  12. require_once 'memcache.php';
  13. $mems->set('name','mywang');
  14. echo $mems->get('name');
  15. memcache_get页面中:
  16. require_once 'memcache.php';
  17. if($mems->get('name')){
  18. echo $mems->get('name');
  19. }else{
  20. //select name from db
  21. //echo $name;
  22. //$mems->set('name','xxx');
    }
Memcache常用方法介绍:
  1. PHP MemcacheAPI地址,点我点我
  2. 常用方法:
  3. Memcache::add 向一个新的key下面增加一个元素
  4. Memcache::addServer  向服务器池中增加一个服务器
  5. Memcache::delete  删除一个元素
  6. Memcache::fetch  抓取下一个结果
  7. Memcache::get  检索一个元素
  8. Memcache::replace  替换已存在key下的元素
  9. Memcache::set  存储一个元素
  10. Memcache::flush  作废缓存中的所有元素
  11. Memcache::getResultMessage  返回最后一次操作的结果描述消息
  12. Memcache::getResultCode  返回最后一次操作的结果代码
  13. Memcache::getDelayedByKey  从指定的服务器上请求多个元素
  14.  
  15. 示例推荐代码
  16. 理论分析推荐(重要)
Memcache的使用:
  1. 一般而言,这些步骤是:
  2. 执行一个或多个查询来从数据库加载信息
  3. 格式化适合于显示(或进一步处理)的信息
  4. 使用或显示格式化了的数据
  5.  
  6. 在使用 Memcache 时,为配合这个缓存,可对应用程序的逻辑进行稍许修改:
  7. 尽量从缓存加载信息
  8. 如果存在,使用信息的被缓存版本
  9. 如果它不存在:
  10. 执行一个或多个查询来从数据库加载信息
  11. 格式化适合于显示或进一步处理的信息
  12. 将信息存储到缓存内
  13. 使用格式化了的数据
  14.  
  15. 减少了从数据库获取信息的次数,从而提高了web网页的响应速度
Memcache与Memcached的区别:
1.目前大多数php环境里使用的都是不带d的memcache版本,这个版本出的比较早,是一个原生版本,完全在php框架内开发的。与之对应的带d的memcached是建立在libmemcached的基础上,所以相对来说,memcached版本的功能更全一些。
2.Memcache是原生实现的,支持OO和非OO两套接口并存。而memcached是使用libmemcached,只支持OO接口。
3.memcached还有个非常称赞的地方,就是flag不是在操作的时候设置了,而是有了一个统一的setOption()。Memcached实现了更多的memcached协议。
4.memcached支持Binary Protocol,而memcache不支持。这意味着memcached会有更高的性能。不过memcached目前还不支持长连接。
Memcache弹性和可用性:
有关 Memcache 最常见的一个问题是:“若缓存不可用了,会发生什么情况呢?”正如之前章节中明示的,缓存内的信息不应该成为信息的的惟一资源。必须要能够从其他位置加载存储在缓存内的数据。
       虽然,无法从缓存访问信息将会减缓应用程序的性能,但它不应该阻止应用程序的运转。可能会发生这样几个场景:
       如果 Memcache 服务宕掉,应用程序应该回退到从原始数据源加载信息并对信息进行显示所需的格式化。此应用程序还应继续尝试在 Memcache 内加载和存储信息。
       一旦 Memcache 服务器恢复可用,应用程序就应该自动尝试存储数据。没有必要强制重载已缓存了的数据,可以使用标准的访问来用信息加载和填充缓存。最终,缓存将会被最常用的数据重新填充。
       再次重申,Memcache 是信息的缓存但并非惟一的数据源。Memcache 服务器不可用不应该是应用程序的终结,虽然这意味着在 Memcache 服务器恢复正常之前性能会有所降低。实际上,Memcache 服务器相对简单,并且虽然不是绝对无故障的,但它的简单性的结果就是它很少会出错。
Memcache的局限性:
1、memcached 不是一个数据库,也就意味这Memcache不能永久地保存数据,只能存在于页面的整个生命周期中
2、memcached 并不安全。为了确保最佳性能,memcached 并未提供任何形式的安全性,没有身份验证,也没有加密。
3、虽然可以使用 memcached 存储加载自数据库的数据行,但这实际上是查询缓存,并且大多数数据库都提供各自的查询缓存的机制。其他的对象,比如文件系统的图像或文件的情况与此相同。很多应用程序和 web 服务器针对此类工作已经有了一些很好的解决方案。
哪些数据该用Memcache缓存,哪些不应该:

1、如果Value特别大,不太适合。在默认编译下Memcache只支持1M的Value,其实从实践的角度来说也不建议把非常大的数据保存在Memcache中,因为有序列化反序列化的过程,别小看它消耗的CPU

2、 如果不允许过期,不太适合。 Memcache在默认情况下最大30天过期,而且在内存达到使用限制后它也会回收最少使用的数据。如果我们要把它当作static变量的话就要考虑到这个问题,必须有重新初始化数据的过程。

3、Memcached是“分布式”的内存对象缓存系统,那么就是说,那些不需要“分布”的,不需要共享的,或者干脆规模小到只有一台服务器的应用,memcached不会带来任何好处,相反还会拖慢系统效率,因为网络连接同样需要资源,即使是UNIX本地连接也一样。 在我之前的测试数据中显示,memcached本地读写速度要比直接PHP内存数组慢几十倍,而APC、共享内存方式都和直接数组差不多。可见,如果只是本地级缓存,使用memcached是非常不划算的。Memcached在很多时候都是作为数据库前端cache使用的。因为它比数据库少了很多SQL解析、磁盘操作等开销,而且它是使用内存来管理数据的,所以它可以提供比直接读取数据库更好的性能,在大型系统中,访问同样的数据是很频繁的,memcached可以大大降低数据库压力,使系统执行效率提升。

4、memcached能够用来存储各种格式的数据,包括图像、视频、文件以及数据库检索的结果等等,而且生产环境中就这么跑过,只不过让大数据量使用缓冲的话,有点太浪费了,同样数量的内存存不了几条数据,所以会明显的降低命中率。

5、Memcached的由于是静态数据,需要每隔一定时间进行清空并从数据库提取数据,而刷新的时间可以根据不同的数据需求而定。

6、那么Memcache主要用在哪些功能上呢?

其实我觉得平时能想到在内存中做缓存的地方我们都可以考虑下是不是可以去适用分布式缓存,但是主要的用途还是用来在前端或中部挡一下读的需求来释放Web服务器App服务器以及DB的压力。

  

  

 
 
分类: PHP

Memcache的一些学习的更多相关文章

  1. memcache/redis 缓存学习笔记

    0.redis和memcache的区别 a.redis可以存储除了string之外的对象,如list,hash等 b.服务器宕机以后,redis会把内存的数据持久化到磁盘上,而memcache则不会 ...

  2. 使用memcache(thinkphp框架学习)

    $memcache = new Memcache; $memcache->connect("localhost",11211); $memcache->set('sxt ...

  3. 最近对Memcache的一些学习

    首先,Memcache是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提供动态.数据库驱动网站的速度,再特别强调下:M ...

  4. 《Memcache学习总结》[PDF]发布

    <Memcache学习总结>[PDF]发布 百度网盘共享: http://pan.baidu.com/s/1mgvayQO  版本号: V1.2 最后跟新: 2015-04-01 讨论组: ...

  5. memcache学习资料

    memcached是国外社区网站LiveJournal团队开发,通过缓存数据库查询结果,减少数据库访问次数,从而提高动态web站点性能.官方站点 http://memcached.org/memcac ...

  6. memcache的学习路线图

     memcache学习材料 //memcache自带的github 上的 wiki     //席剑飞 Memcache(MC)系列 1~8系列 评注: memcache系统写的最深的一博客,建议一读 ...

  7. php之memcache学习

    php之memcache学习 简介: memcache是一个分布式高速缓存系统. 分布式是说可以部署在多台服务器上,实现集群效果: 高速是因为数据都是维护在内存中的: 特点和使用场景: 1.非持久化存 ...

  8. 五分钟学后端技术:如何学习Redis、memcache等常用缓存技术

    原创声明 本文作者:黄小斜 转载请务必在文章开头注明出处和作者. 本文思维导图 什么是缓存 计算机中的缓存 做后端开发的同学,想必对缓存都不会陌生了,平时我们可能会使用Redis,MemCache这类 ...

  9. Memcache学习整理

    一.Memcache 是什么? 组成:程序进程管理.Socket 程序进程:Memcache把内存先分成几个大份,每一份分成多个小份.例如:小份中有5M...0.9M.0.8M.....0.1M,一份 ...

随机推荐

  1. jenkins综合cobertura,来电显示cobertura的report

    我的项目是使用maven作为构建工具.左右maven如何整合jenkins请参阅: http://blog.csdn.net/yaominhua/article/details/40684355 本文 ...

  2. 在windows下用C语言写socket通讯实例

    原文:在windows下用C语言写socket通讯实例 From:Microsoft Dev Center #undef UNICODE #define WIN32_LEAN_AND_MEAN #in ...

  3. 超高性能的json序列化

    超高性能的json序列化之MVC中使用Json.Net 超高性能的json序列化之MVC中使用Json.Net 先不废话,直接上代码 Asp.net MVC自带Json序列化 1 /// <su ...

  4. WaitHandle、AutoResetEvent、ManualResetEvent

    多线程中的锁系统(三)-WaitHandle.AutoResetEvent.ManualResetEvent 介绍 本章主要说下基于内核模式构造的线程同步方式,事件,信号量. 目录 一:理论 二:Wa ...

  5. POJ 3070 Fibonacci(矩阵高速功率)

    职务地址:POJ 3070 用这个题学会了用矩阵高速幂来高速求斐波那契数. 依据上个公式可知,第1行第2列和第2行第1列的数都是第n个斐波那契数.所以构造矩阵.求高速幂就可以. 代码例如以下: #in ...

  6. POJ 3380 最大流

    Paratroopers Time Limit:1000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u Submit ...

  7. 一个web开发框架

    一个web开发框架 怎么才能成为一名架构师?需要具备哪些条件? 作为一名码农我迫切希望自己成为一个比较合格的web架构师,昨晚心血来潮小弟花了4个小时的时间整了个简易的web开发框架,由于第一次搭建框 ...

  8. 读书笔记—CLR via C#章节3

    这本书这几年零零散散读过两三遍了,作为经典书籍,应该重复读反复读,既然我现在开始写博了,我也准备把以前觉得经典的好书重读细读一遍,并且将笔记整理到博客中,好记性不如烂笔头,同时也在写的过程中也可以加深 ...

  9. Android项目--Json解析

    在过去的一段时间里,我希望做一个天气的应用,但是由于老版的天气接口已经不能用了.只能更新到2014年3月4日. 不过有些东西,哪来学习一下,也是可以的. 比如:http://m.weather.com ...

  10. Best jQuery Plugins of the Month – May 2014

    1. jQuery referenceSection jQuery referenceSection by Scott Mascio ensures to help users in adding a ...