memcache 和 memcached 的区别

区别分析:

其实我们这里所说的 memcache 和 memcached 说的是 PHP 的扩展,假如我们要在 PHP 中使用 memcache ,我们肯定是先在服务器上安装 memcache 服务,然后为 PHP 安装对应的扩展,这样我们才能用 PHP 代码控制 memcache,那么安装完之后我们 echo phpinfo(); 会发现:

这里我们要讨论的就是图片上显示的 memcache 和 memcached:

1、memcache最早是在2004年2月开发的,最后更新是在2013年4月,而 memcached 最早是在2009年1月开发的,最后更新是在2014年1月更新的。因此 memcache的历史 比 memcached 早。更多信息大家可以参考:

memcache:pecl.php.net/package/me
memcached:pecl.php.net/package/me

2、 memcache 是一个原生版本,完全是在 PHP 框架内开发的,支持 OO(面向对象) 和非 OO 两套接口并存,而 memcached 是建立在 libmemcached 的基础上的,只支持 OO 接口。这就意味着在安装 memcache 扩展的时候不要求安装其他的东西,但是在安装 memcached 的时候会要求你安装 libmemcached。别嫌麻烦!因为 libmemcached 是 memcache 的 C 客户端,它具有低内存,线程安全等优点。据说新浪微博之前就全面将 PHP 的 memcache 替换成 PHP 的 memcached,在高并发下,稳定性果断提高。

3、memcached 有个比较 nice 的地方,就是 flag 不是在操作的时候设置的,而是有一个统一的 setOption() 函数进行设置,我们可以举添加缓存数据为例子:

#memcache:
bool Memcache::add ( string $key , mixed $var [, int $flag [, int $expire ]] )

#memcached:
public bool Memcached::add ( string $key , mixed $value [, int $expiration ] )

从上面各自的 add 方法可以看到,memcache 的 add 方法中的第三个参数代表是否对数据进行压缩,这样假如说我的缓存需要设置过期时间,但是 flag 参数在前面,我就得每一次都对 flag 进行设置!
而 memcached 中是使用 setOption() 来进行统一设置的(默认开启压缩)。

4、memcached 比 memcache 支持更多的 memcache 协议,大概也就是说 memcached 有更多的方法,比如 getMulti() 和 setMulti() 函数非常有用,但是 memcache 并不支持。
更多的方法大家可以看PHP的官方手册:
memcache:php.net/manual/zh/book.
memcached:php.net/manual/zh/book.

5、差别比较大的一点是,memcached 支持 Binary Protocol,而 memcache 不支持,这意味着 memcached 会有更高的性能。但是网上很多博客说 memcached 不支持长连接,这其实不然,大家看官方手册:php.net/manual/zh/memca

上面明确的提出,当使用长链接的时候。。。。。因此 memcached是能够实现长连接的。

6、比较尴尬的一点是 memcached 和 memcache 对应的服务端名字都是 memcached,大家使用 ps aux | grep memcache 就会发现守护进程的名字是 memcached(我的环境是 ubuntu),其实后面的 d 可以理解为守护进程,因此网上有的人说 memcache 是客户端, memcached 是服务端就是这个意思,同学们不要将客户端的 memcached 和服务端的 memcached 混淆了就好。

7、两者在实现某些相同功能时所使用的算法也是有一定差异的,由于内容比较深,我也不太懂。。。。。

总结

从上面的分析也可以得出一个结论:memcached 比 memcache 好

发布于 2018-10-10