Deprecated: htmlspecialchars(): Passing null to parameter #1 ($string) of type string is deprecated in /webData/hua/www.ascwh.com/var/Typecho/Feed.php on line 367
ASCWH - memcache 2019-09-30T14:04:41+08:00 Typecho https://www.ascwh.com/feed/atom/category/memcache/ <![CDATA[memcache 与 memcached 的区别]]> https://www.ascwh.com/262.html 2019-09-30T14:04:41+08:00 2019-09-30T14:04:41+08:00 ASCWH https://www.ascwh.com Memcache是一个软件

Memcache是一个自由和开放源代码、高性能、分配的内存对象缓存系统。用于加速动态web应用程序,减轻数据库负载。

它可以应对任意多个连接,使用非阻塞的网络IO。由于它的工作机制是在内存中开辟一块空间,然后建立一个HashTable,Memcache这个软件项目一般叫Memcache,但项目的主程序文件叫memcached.exe,是靠服务端的这个守护进程管理这些HashTable。由于这个命名问题,所以很多人把这个软件系统叫memcache,想叫成memcached也没什么问题!

PHP有两个针对上述软件的PECL扩展:一个叫memcache,一个叫memcached

memcache扩展是完全在PHP框架内开发的,memecached扩展是使用libmemcached的。从手册上看,memcached 会比 memcache 多几个方法,使用方式上都差不多,具体区别稍后再谈!

这样大家应该明白了吧,下面画了一个图帮助理解:

可知,不同语言都有自己针对Memcache的扩展!

PHP中memcache扩展和memcached扩展的区别

对于这个内存缓存系统,PHP有两个扩展,分别是memcache和memcached扩展。而memcached和memcache的守护进程 memcached 同名,比较容易引起混淆,甚至提到memcached,有些人第一想到的是后台的守护进程,这里还是有必要分析一下两者之间的区别,以下观点仅是个人观点,希望朋友进行补充和更正。

首先我们可以从php官方手册上可以清晰的看到两者的区别:

memcache:http://cn2.php.net/manual/en/book.memcache.php
memcached:http://cn2.php.net/manual/en/book.memcached.php
memcache是完全在PHP框架内开发的,memecached是使用libmemcached的。从手册上看,memcached 会比 memcache 多几个方法,使用方式上都差不多。

memcache是原生实现的,但是使用libmemcached的memached只支持OO接口,而 memcache则是OO和非OO两套接口并存,以后随着memcached服务器端的改进,这个lib也必定会马上跟进的。而memcache却不一定能做到按时跟进。

memcached,还有个非常称赞的地方,就是flag不是在操作的时候设置了。而是有一个统一的setOption()。memcached 实现了更多的 memcached 协议(毕竟是基于 libmemcached 库的)。

这里有另外一个对比表,很明显,用 memcached 会让人放心很多:http://code.google.com/p/memcached/wiki/PHPClientComparison

差别比较大的一点是,memcached 支持 Binary Protocol,而 memcache 不支持,意味着 memcached 会有更高的性能。不过,还需要注意的是,memcached 目前还不支持长连接。

(转)

]]>
<![CDATA[Mac 下 MAMP PRO 安装memcache扩展以及 memcache服务器端]]> https://www.ascwh.com/93.html 2018-06-13T10:12:00+08:00 2018-06-13T10:12:00+08:00 ASCWH https://www.ascwh.com 因为其那边编译安装过redis 部分现在就不再重复编译PHP了 不了解的可以查看
Mac MAMP PRO 安装redis扩展以及 redis服务器端

首先要分清memcache服务端和客户端。服务端是memcached,客户端就是php的扩展了。

安装memcache扩展

1、安装autoconf brew install autoconf 可能有部分已经安装过

2、这边 memcached 扩展在这就用 pecl 直接安装了 首先进入相对应的PHP版本的 bin目录找到 pecl的所在 然后 直接执行 。sudo ./pecl install memcache 然后就会自动安装了

1.png

按照上图所说,在php.ini中最后加上 extension=memcache.so重启 MAMP,打开phpinfo() , 会看到 memcache 模块 ,到现在扩展已经安装好了。
2.png

安装memcache 本地服务器端

安装服务端还是直接使用 Homebrew 安装, brew install memcached 注意是memcached启动命令 memcached -d -m 10 -u root -l 127.0.0.1 -p 11211 256 -P /tmp/memcached.pid 这就好了,还是一样具体的项目优化就多少了自己研究下吧;

附测试小实例

    $mem = new Memcache;
    $is_add = $mem->addServer('localhost',11211);
    $mem->set('key2','吆不错哦', false, 60);
    $key2 = $mem->get('key2');
    echo $key2."<BR>";
    $mem->replace('key2','这是真的吗 ?',false,60);
    $key2 = $mem->get('key2');
    echo $key2;
    exit();

注意

问题 1

configure: error: memcache support requires ZLIB. Use --with-zlib-dir=<DIR> to specify prefix where ZLIB include and library are located

ERROR: `/private/tmp/pear/temp/memcache/configure --enable-memcache-session=yes' failed
这个问题引起是因为zlib在安装时没有正确被引入,解决的办法是使用brew进行zlib的安装

brew install zlib
安装后执行 ./pecl install memcache 时还会出现同样的问题,需要将zlib的头文件及库文件添加至系统默认的路径

ln -s /usr/local/Cellar/zlib/1.2.8/include/* /usr/local/include  
ln -s /usr/local/Cellar/zlib/1.2.8/lib/* /usr/local/lib  
]]>