memcache和memcached的区别

前两天,大家在群里讨论memcache缓存时,有群友提到了在memcache中如何存储数组,并如何直接通过数组索引取值的问题?当时,大家的回答基本一致是memcache是key-value形式的内存缓存系统。对于缓存key,只能是string类型,而无法存储array类型的key。虽然大家的理解基本保持一致,但是本着求证的态度,我还是查阅了php官方文档。官方示例代码如下:

<?php
$m = new Memcached();
$m->addServer('localhost', 11211);

$items = array(
    'key1' => 'value1',
    'key2' => 'value2',
    'key3' => 'value3'
);
$m->setMulti($items);
$result = $m->getMulti(array('key1', 'key3', 'badkey'), $cas);
var_dump($result, $cas);
?>

以上代码的输出如下:

array(2) {
  ["key1"]=>
  string(6) "value1"
  ["key3"]=>
  string(6) "value3"
}
array(2) {
  ["key1"]=>
  float(2360)
  ["key3"]=>
  float(2362)
}

Memcached::setMulti()类似于Memcached::set(),它是一次存储多个key/value元素,以便于对多个元素的操作。之前我理解为key可以是array数组,但实际上并不是。setMulti()方法相当于是多次调用set()方法存储数据。在这里谢谢@乌大湿的指点。群友的问题暂时无解,那代码中的memcached和我们平常认知的memcache有何不同?

What is Memcached?

我们首先来介绍一下memcached服务端。memcached官网的介绍如下: *Free & open source, high-performance, distributed memory object caching system, generic in nature, but intended for use in speeding up dynamic web applications by alleviating database load.

Memcached is an in-memory key-value store for small chunks of arbitrary data (strings, objects) from results of database calls, API calls, or page rendering.*

简单的说,memcached是一款开源免费的,以key-value形式缓存数据的高性能分布式内存缓存系统。它是以守护进程(daemon)的形式常驻内存当中,即memcached是一个服务端。它通常用来缓存数据,减少数据库的负载以提升应用的性能。

memcache又是什么?

PHP官方包中对memcache的解释如下:

在“Summary”中已经说明memcache是php扩展,用于连接操作memcached服务端。最新版本是2013年04月07日的3.0.8。

我们注意到,在解决文章开篇提出的问题时,是用了“setMulti”和“getMulti”两个函数,但是memcache函数列表中,并没有这两个方法:

这两个方法却是在memcached函数列表

memcached不是以守护进程形式长驻内存当中的服务端么?这里的memcached又是什么鬼?

memcached又是什么鬼?

php官方包中对memcached的介绍如下:

“Summary”和“Description”中解释说,memcached是php扩展,通过libmemcached库提供的API来操作memcached服务端。最新版本是2014年04月01日更新的2.2.0。

介绍到这里,相信大家已经基本明白了。memcached是以守护进程形式,长驻内存当中的高性能分布式的key-value缓存系统,而我们常说的memcache是PHP连接memcached服务端的扩展,版本比较老,姑且称之为老扩展。同时也存在一个PHP连接memcached服务端的扩展,叫memcached,扩展名与服务端名相同。因为支持的函数与协议比老的memcache扩展多,版本也比较新,姑且称之为新扩展。

使用建议

在文档中的函数列表里,通过对比可以看到memcached新扩展的函数比memcache老扩展的函数丰富,同时也支持array类型的key存储。这里也有一份memcache老扩展与memcached新扩展的功能对比,大家可以了解一下。

经过新浪微博和UC总结的经验和教训,memcache老扩展在分布式读取数据和高并发下的稳定性上都有一些问题,而memcached新扩展的表现却稳定的多。所以在使用当中建议将memcache老扩展切换成memcached新扩展。

附上memcached安装教程链接:http://www.marser.cn/archives/75/

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏数据之美

玩转 Nginx 之:使用 Lua 扩展 Nginx 功能

1、Nginx 简介 Nginx 作为一款面向性能设计的HTTP服务器,相较于Apache、lighttpd具有占有内存少,稳定性高等优势。其流行度越来越高,应...

5367
来自专栏VMCloud

【解析向】腾讯云的Windows Server日志配置收集工具是个什么鬼?(3)

回顾上篇,解释了场景“2”中的四个标签,也介绍了对应着Windows Server中的四个功能在日常运维中究竟起到什么作用以及如何去驾驭他们。

28813
来自专栏MelonTeam专栏

一种下载管理方案的设计与实现

导语: 4G时代流量资费大幅下降,各种“WBQ”卡惊艳出世——在此背景下,下载对于移动端已不再是一种昂贵的高成本行为。同时EMMC、UFS等存储介质的发展也...

22110
来自专栏逆向与安全

漏洞分析入门一

0x00: 什么是漏洞及漏洞分类 1. 漏洞是指信息系统在生命周期的各个阶段(设计、实现、运维等过程)中产生的某类问题,这些问题会对系统的安全(机密性、完整性、...

662
来自专栏Linux Python 加油站

Linux学习----文件的使者-Rsync(马哥教育原创)

Rsync是Unix下的一款应用软件,它能同步更新两处计算机的文件与目录,并适当利用差分编码以减少数据传输。rsync中一项与其他大部分类似程序或协议中所未见的...

1144
来自专栏云端漫步

mac下开启docker API远程调用

docker容器技术至今已有五年的发展,作为一个工具,已经像Linux命令一样融入我们开发的生活。现在大多开发都使用Mac作为开发机,大都会装一个Docker ...

560
来自专栏java一日一条

使用 Python 编写多线程爬虫抓取百度贴吧邮箱与手机号

不知道大家过年都是怎么过的,反正栏主是在家睡了一天,醒来的时候登QQ发现有人找我要一份贴吧爬虫的源代码,想起之前练手的时候写过一个抓取百度贴吧发帖记录中的邮箱与...

562
来自专栏互联网高可用架构

Java服务化系统线上应急和技术攻关,你必须拥有的那些应用层脚本和Java虚拟机命令

1763
来自专栏SeanCheney的专栏

《Python分布式计算》 第6章 超级计算机群使用Python (Distributed Computing with Python)典型的HPC群任务规划器使用HTCondor运行Python任务

本章,我们学习另一种部署分布式Python应用的的方法。即使用高性能计算机(HPC)群(也叫作超级计算机),它们通常价值数百万美元(或欧元),占地庞大。 真正的...

75910
来自专栏ascii0x03的安全笔记

SEED缓冲区溢出实验笔记

缓冲区溢出实验(Linux 32位) 参考教程与材料:http://www.cis.syr.edu/~wedu/seed/Labs_12.04/Software...

3545

扫码关注云+社区