php上的memcache和memcached两个pecl库


Posted in PHP onMarch 29, 2010

之前尝试用的是memcache,后来发现memcached支持setMulti方法,准备转向使用memcached库了。

(试了下,实际上,memcache从支持多值set,但文档上还没有,看changelog好像是3.0开始支持,稳定版可能不带此功能。)

至于效率,也不清楚会有多大差距。

这里有一篇文章也说到,memcached是基于libmemcached,可能要好一些。

终于,基于libmemached的php扩展在pecl发布了。

于是,现在pecl上有两个memcache客户端了。一个是完全在PHP框架内开发的memcache,一个是使用libmemcached的memecached

功能嘛,我没看过libmemcached,但是理论上来说,在其他语言里已经很流行的libmemcached应该会有更完善的功能。而程序上性能(内存和CPU使用率),不好说,虽然pecl::memcache是原生实现的,但是使用libmemcached的pecl::memached只支持OO接口,而pecl::memcache则是OO和非OO两套接口并存,这点拖累了它。

其实这些都不是最重要的。使用libmemcached有个明显的优点,就是以后随着memcached服务器端的改进,这个lib也必定会马上跟进的。而pecl::memcache却不一定能做到按时跟进。

pecl::memcached,还有个非常称赞的地方,就是flag不是在操作的时候设置了。而是有一个统一的setOption()。冲着这个方法,就非常值得从pecl::memcache转到pecl::memcached了。具体的接口可以看这里:http://cvs.php.net/viewvc.cgi/pecl/memcached/memcached-api.php?view=markup

我在pecl-dev@里提到是否可以做成driver-based的架构。跟现在的MySQL一样,可以选择使用mysqlnd或者libmysql作为底层的引擎。但是之后想想,其实我并不是很支持对memcached使用这样的架构,它和MySQL的情况不一样。

mysqlnd作为一个引擎而不是一个新的api来开发,可以使得大量的应用程序不需要对数据库操作做修改即可用上新的引擎。如果mysqlnd作为一个新的extension,那么如果它想兼容以前的程序,就面临一个很困难的选择。因为目前为止,存在3个官方的使用libmysql的,并具有不同对外接口的MySQL类集。mysqlnd能兼容mysql,就无法兼容mysqli或者pdo。当然对于使用自己的抽象数据库类的程序来说,这个可以通过改写类或者更换driver(php层面)来实现兼容。但是要想想,就算是使用抽象库,这个世界如此之多的数据库抽象库,如果要让所有人都用得起nd,那得改多少个库,加多少个driver阿。

memcached的情况就简单很多了,目前和官方关系比较密切的只有pecl::memcache,而且接口基本上都是根据memcached的协议来的,和libmemcache相差无几。它们其实都可以被看作是一个抽象类里的不同driver。所以虽然是两套不同的客户端,但是更换起来,几乎不需要做什么改动,只需要在类初始化的地方更改一下,set/get等等这些方法的flag去掉即可,除非你使用了非OO的接口。

另外mysql在通讯和数据获取上也比memcache复杂,nd可以做到一些libmysql无法做到的事情。例如buffer可以直接用php内部的HashTable和zval存储;再例如一些作为持久链接的结构可以更多地缓存起来。(这些例如只是我的猜测,我并没有去阅读过mysqlnd的代码)

Memcached manual:

PHP 相关文章推荐
PHP autoload与spl_autoload自动加载机制的深入理解
Jun 05 PHP
解析MySql与Java的时间类型
Jun 22 PHP
在windows平台上构建自己的PHP实现方法(仅适用于php5.2)
Jul 05 PHP
使用php计算排列组合的方法
Nov 13 PHP
Yii使用find findAll查找出指定字段的实现方法
Sep 05 PHP
PHP curl CURLOPT_RETURNTRANSFER参数的作用使用实例
Feb 07 PHP
Laravel中使用阿里云OSS Composer包分享
Feb 10 PHP
使用symfony命令创建项目的方法
Mar 17 PHP
php parse_str() 函数的定义和用法
May 23 PHP
详解PHP编码转换函数应用技巧
Oct 22 PHP
php实现基于PDO的预处理示例
Mar 28 PHP
PHP基于正则批量替换Img中src内容实现获取缩略图的功能示例
Jun 07 PHP
php 字符串函数收集
Mar 29 #PHP
DW中链接mysql数据库时,建立字符集中文出现乱码的解决方法
Mar 27 #PHP
PHP初学者最感迷茫的问题小结
Mar 27 #PHP
php echo()和print()、require()和include()函数区别说明
Mar 27 #PHP
PHP 一个比较完善的简单文件上传
Mar 25 #PHP
php+mysql 实现身份验证代码
Mar 24 #PHP
PHP 抓取网页图片并且另存为的实现代码
Mar 24 #PHP
You might like
一个阿拉伯数字转中文数字的函数
2006/10/09 PHP
wordpress之wp-settings.php
2007/08/17 PHP
php获取json数据所有的节点路径
2015/05/17 PHP
PHP命名空间namespace用法实例分析
2016/09/27 PHP
详谈配置phpstorm完美支持Codeigniter(CI)代码自动完成(代码提示)
2017/04/07 PHP
写了一个layout,拖动条连贯,内容区可为iframe
2007/08/19 Javascript
图像替换新技术 状态域方法
2010/01/28 Javascript
JavaScript 函数replace深入了解
2013/03/14 Javascript
javascript正则表达式使用replace()替换手机号的方法
2015/01/19 Javascript
jQuery简单倒计时效果完整示例
2016/09/20 Javascript
Vue方法与事件处理器详解
2016/12/01 Javascript
JS中把函数作为另一函数的参数传递方法(总结)
2017/06/28 Javascript
js图片轮播插件的封装
2017/07/21 Javascript
JavaScript输入分钟、秒倒计时技巧总结(附代码)
2017/08/17 Javascript
Layui组件Table绑定行点击事件和获取行数据的方法
2018/08/19 Javascript
Nodejs中的JWT和Session的使用
2018/08/21 NodeJs
element UI upload组件上传附件格式限制方法
2018/09/04 Javascript
微信小程序实现无限滚动列表
2020/05/29 Javascript
Angular6新特性之Angular Material
2018/12/28 Javascript
Vue-cli 移动端布局和动画使用详解
2020/08/10 Javascript
Python中functools模块函数解析
2017/03/12 Python
Python解决N阶台阶走法问题的方法分析
2017/12/28 Python
python使用KNN算法手写体识别
2018/02/01 Python
python编写猜数字小游戏
2019/10/06 Python
基于Python计算圆周率pi代码实例
2020/03/25 Python
俄罗斯女装店:12storeez
2019/10/25 全球购物
应用艺术毕业生的自我评价
2013/12/04 职场文书
毕业生的自我评价分享
2013/12/18 职场文书
水毁工程实施方案
2014/04/01 职场文书
英语课外活动总结
2014/08/27 职场文书
高等学院职业生涯规划书范文
2014/09/16 职场文书
重阳节标语大全
2014/10/07 职场文书
男方婚礼答谢词
2015/01/20 职场文书
关于颐和园的导游词
2015/01/30 职场文书
团队合作精神学习心得体会
2016/01/19 职场文书
Python作用域和名称空间的详细介绍
2022/04/13 Python