Memcache的一些学习

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

Memcache的配置:
安装,配置Memcache,中间磕磕碰碰还是有遇到一些小问题的。
1、下载一个稳定版本的Memcache,点我下载.找个最新版本的pecl压缩包,并放到某个盘下,并通过cmd控制台启动,必须要管理员身份,不然报错(我开始就报错过 - -),安装命令:c:/Memcache.exe –d install
然后再打:c:/Memcache.exe –d start,启动服务
2、第二步,根据自身PHP版本,寻找对应的php_Memcache.dll并下载(重要,开始随便下了个,就无法使用Memcache,各种报错),我的PHP是5.4.4版本(http://huangqiqing123.iteye.com/blog/1682857),并放到PHP中的ext并在php.info配置文件下加一句话:extension=php_memcache.dll
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.2.6 
Memcache简单示例:
Hello World
$mems = new memcache;
$mems->connect('localhost',11211) or die ("链接失败");
$mems->set(‘test’,’Hello World!’);
Echo $mems->get(‘name’);
实际应用:先创建一个MyMemcache.php,代码如下:
class MyMemcache extends memcache{
function __construct(){
memcache::addServer('localhost',11211)or die ("链接失败");}}
$mems = new MyMemcache();
再在需要的时候包含进来,例如:在memcache_set页面中:
require_once 'memcache.php';
$mems->set('name','mywang');
echo $mems->get('name');
在memcache_get页面中:
require_once 'memcache.php';
if($mems->get('name')){
echo $mems->get('name');
}else{
//select name from db
//echo $name;
//$mems->set('name','xxx');
}
Memcache常用方法介绍:
       PHP Memcache的API地址,点我点我
常用方法:
Memcache::add 向一个新的key下面增加一个元素
Memcache::addServer — 向服务器池中增加一个服务器
Memcache::delete — 删除一个元素
Memcache::fetch — 抓取下一个结果
Memcache::get — 检索一个元素
Memcache::replace — 替换已存在key下的元素
Memcache::set — 存储一个元素
Memcache::flush — 作废缓存中的所有元素
Memcache::getResultMessage — 返回最后一次操作的结果描述消息
Memcache::getResultCode — 返回最后一次操作的结果代码
Memcache::getDelayedByKey — 从指定的服务器上请求多个元素 示例推荐代码
理论分析推荐(重要)
Memcache的使用:
一般而言,这些步骤是:
执行一个或多个查询来从数据库加载信息
格式化适合于显示(或进一步处理)的信息
使用或显示格式化了的数据 在使用 Memcache 时,为配合这个缓存,可对应用程序的逻辑进行稍许修改:
尽量从缓存加载信息
如果存在,使用信息的被缓存版本
如果它不存在:
执行一个或多个查询来从数据库加载信息
格式化适合于显示或进一步处理的信息
将信息存储到缓存内
使用格式化了的数据 减少了从数据库获取信息的次数,从而提高了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. .Net2.0 --Winform结合WebBrowser控件和Socket老技术来实现另类Push~

    原文:.Net2.0 --Winform结合WebBrowser控件和Socket老技术来实现另类Push~ 目前的企业级开发比较流行的是Web2.0技术,但是由于Web技术基于请求--响应的交互模式 ...

  2. PCIe固态存储和HDD常见的硬盘性能对比测试

    2周测试后,导致以下结果 MySQL-OLTP测试结果:(50表.每个表1000广域网数据,1000个线程) TPS:MySQL在PCIe固态存储上执行是在HDD上执行的5.63倍 writes:My ...

  3. SQL点滴30—SQL中常用的函数

    原文:SQL点滴30-SQL中常用的函数 该文章转载自http://www.cnblogs.com/jiajiayuan/archive/2011/06/16/2082488.html 别人的总结,很 ...

  4. ural1519插头DP

    1519. Formula 1 Time limit: 1.0 second Memory limit: 64 MB Background Regardless of the fact, that V ...

  5. 解决水晶报表提示“未知的查询引擎错误” FOR VS2010

    原文:解决水晶报表提示“未知的查询引擎错误” FOR VS2010 在VS2010环境下运行水晶报表(当然要先装上Crystal Report For VS2010), 在SetDataSource方 ...

  6. WebIM(3)----性能测试

    WebIM系列文章 在一步一步打造WebIM(1)和(2)中,已经讨论了如何开发一个WebIM,并且使用缓存来提高WebIM的性能,本文将编写一个程序模拟大量用户登录来对WebIM进行性能测试. 1. ...

  7. 九度OJ 1035:找出直系亲属(二叉树)

    题目1035:找出直系亲属 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:1309 解决:521 题目描述: 如果A,B是C的父母亲,则A,B是C的parent,C是A,B的child,如 ...

  8. 使用JQUERY操作Radio

    发展中经常使用Radio为了实现用户的选择的影响.我在该项目中使用的一些JQUERY操作Radio该方法.这里分享,对于有需要的朋友参考的. 1.变化radio选择.引发一些结果 $("in ...

  9. 【转】视差滚动(Parallax Scrolling)效果的原理和实现

    原文:http://www.cnblogs.com/JoannaQ/archive/2013/02/08/2909111.html 视差滚动(Parallax Scrolling)是指让多层背景以不同 ...

  10. A/B测试评测

    A/B测试评测 A/B测试在各类网站设计中已经是比较常见的,本文着重讲讲A/B测试在应用推送领域的作用. 目前国外开通A/B测试的推送服务商只有swrve,而国内的个推也在前不久发布的smart pu ...