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


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');
}


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 时,为配合这个缓存,可对应用程序的逻辑进行稍许修改:
尽量从缓存加载信息
如果存在,使用信息的被缓存版本
如果它不存在:
执行一个或多个查询来从数据库加载信息
格式化适合于显示或进一步处理的信息
将信息存储到缓存内
使用格式化了的数据 减少了从数据库获取信息的次数,从而提高了web网页的响应速度

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 服务器相对简单,并且虽然不是绝对无故障的,但它的简单性的结果就是它很少会出错。 |
1、memcached 不是一个数据库,也就意味这Memcache不能永久地保存数据,只能存在于页面的整个生命周期中2、memcached 并不安全。为了确保最佳性能,memcached 并未提供任何形式的安全性,没有身份验证,也没有加密。 3、虽然可以使用 memcached 存储加载自数据库的数据行,但这实际上是查询缓存,并且大多数数据库都提供各自的查询缓存的机制。其他的对象,比如文件系统的图像或文件的情况与此相同。很多应用程序和 web 服务器针对此类工作已经有了一些很好的解决方案。 |
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的压力。
Memcache的一些学习的更多相关文章
- memcache/redis 缓存学习笔记
0.redis和memcache的区别 a.redis可以存储除了string之外的对象,如list,hash等 b.服务器宕机以后,redis会把内存的数据持久化到磁盘上,而memcache则不会 ...
- 使用memcache(thinkphp框架学习)
$memcache = new Memcache; $memcache->connect("localhost",11211); $memcache->set('sxt ...
- 最近对Memcache的一些学习
首先,Memcache是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提供动态.数据库驱动网站的速度,再特别强调下:M ...
- 《Memcache学习总结》[PDF]发布
<Memcache学习总结>[PDF]发布 百度网盘共享: http://pan.baidu.com/s/1mgvayQO 版本号: V1.2 最后跟新: 2015-04-01 讨论组: ...
- memcache学习资料
memcached是国外社区网站LiveJournal团队开发,通过缓存数据库查询结果,减少数据库访问次数,从而提高动态web站点性能.官方站点 http://memcached.org/memcac ...
- memcache的学习路线图
memcache学习材料 //memcache自带的github 上的 wiki //席剑飞 Memcache(MC)系列 1~8系列 评注: memcache系统写的最深的一博客,建议一读 ...
- php之memcache学习
php之memcache学习 简介: memcache是一个分布式高速缓存系统. 分布式是说可以部署在多台服务器上,实现集群效果: 高速是因为数据都是维护在内存中的: 特点和使用场景: 1.非持久化存 ...
- 五分钟学后端技术:如何学习Redis、memcache等常用缓存技术
原创声明 本文作者:黄小斜 转载请务必在文章开头注明出处和作者. 本文思维导图 什么是缓存 计算机中的缓存 做后端开发的同学,想必对缓存都不会陌生了,平时我们可能会使用Redis,MemCache这类 ...
- Memcache学习整理
一.Memcache 是什么? 组成:程序进程管理.Socket 程序进程:Memcache把内存先分成几个大份,每一份分成多个小份.例如:小份中有5M...0.9M.0.8M.....0.1M,一份 ...
随机推荐
- Theano学习笔记(一)——代数
标量相加 import theano.tensor as T from theano import function x = T.dscalar('x') y = T.dscalar('y') z = ...
- Windows socket之最简单的socket程序
原文:Windows socket之最简单的socket程序 最简单的服务器的socket程序流程如下(面向连接的TCP连接 ): 1. WSAStartup(); 初始化网络库的使用. 2. soc ...
- Web API-属性路由
路由(Routing)就是Web API如何将一个URI匹配到一个action的过程.Web API 2 支持一个新的路由方式-属性路由(attribute routing).顾名思义,属性路由使用标 ...
- 【淡墨Unity3D Shader计划】五 圣诞用品: Unity在Shader三种形式的控制&混合操作编译
本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接:http://blog.csdn.net/poem_qianmo/article/details/42060963 作者:毛星云(浅墨) ...
- 基于科大讯飞语音云windows平台开发
前记: 前段时间公司没事干,突发奇想想做一个语音识别系统,看起来应该非常easy的,但做起来却是各种问题,这个对电气毕业的我,却是挺为难的.谷姐已经离我们而去,感谢度娘,感谢CSDN各位大神,好歹也做 ...
- 使用Vim或Codeblocks格式化代码
在网上的代码,有很多的代码都是丢失缩进的,几行还好,手动改改,多了呢,不敢想象,没有缩进的代码.别说排错,就是阅读都是困难的,还好,有两个常用工具可以轻松的解决问题. (一)Vim(简单方便,可将代码 ...
- 图文详解ReSharper 8.1功能变化
ReSharper 8.1版本已经发布有段时间了,被广大开发者购买和试用,今天小编就ReSharper 8.1功能变化就行详细的解说. 支持TypeScript 突出了重构(重命名,引入变量).导航. ...
- openwrt的GPIO控制
为什么有些GPIO可以在/sys/class/gpio中控制,而有些不行呢? 先来看一看普通不需要C程序而是使用脚本的控制方法(Linux普遍适用): First step is making GPI ...
- How to write own add-in for SSMS 2012 (Final release version)
原文 How to write own add-in for SSMS 2012 (Final release version) Reading internet forums I have noti ...
- javascript保留两位
原文:javascript保留两位 //保留两位小数 //功能:将浮点数四舍五入,取小数点后2位 function toDecimal(x) { var f = parseFloat(x); if ( ...