44

我是学习 memcached 的初学者。memcached 服务器最让我困惑。我可以将它视为像 Web 服务器一样的单台服务器计算机吗?我也对 memcached 服务器和客户端之间的关系感到困惑,它们是否位于不同的计算机上?

4

2 回答 2

66

我同意@phihag 回答的大多数事情,但我必须澄清一些事情。

Memcached 根据键存储数据(phihag 将其称为 id,不要与数据库 id 混淆)。数据可以有各种大小,因此您可以存储少量数据(例如从数据库中提取的 1 条记录),也可以存储大量数据(例如数百条记录或整个完成的 html 页面)。

Memcached通常与应用程序服务器在同一台机器上使用,原因是因为它被设计为通过 TCP 使用(如果它被设计为在同一台服务器上工作,它可以通过套接字访问)并且它被设计为作为池服务器。

池化部分很有趣——你可以让 10 台机器运行 Memcached,每台机器为此分配最多 10GB 的内存。10*10 = 100GB 内存空间。

当您将值写入 Memcached 时,只有一个(随机或通过某些算法)服务器存储它。当您尝试从 Memcached 读取值时,只有存储了它的服务器会将其发送给您。

因此,您确实可以将所有数据库/内存缓存/应用程序/文件服务器放在同一台机器上,通常您会为您的开发沙箱这样做。但您也可以将它们放在单独的机器上,也可以将两者结合起来。

如果您只需要一个 Memcached 服务器,您可能可以将其托管在与应用程序代码相同的机器上。

如果开始使用 varnish 等前端缓存服务器,或者将 NginX 配置为前端缓存服务器,则必须配置一些 Memcached 服务器来存储这些前端缓存服务器正在缓存的数据。

如果您将数据库分发到多台服务器中,将文件服务器分发到 CDN 中,这意味着您的应用程序会在短时间内处理大量数据,因此您将需要大量 RAM 空间,而这些空间在单个服务器中是无法使用的应用服务器。

由于为 Memcached 服务器扩展内存池就像将新服务器的 IP 添加到列表中一样简单,因此您将像在许多服务器中一样水平扩展(这是 Memcached 的真正典型用途)。

于 2012-05-26T14:15:52.310 回答
28

memcached 服务器是一个管理 memcached 存储的数据的程序(不要与机器混淆,它也可以称为服务器)。理论上,它可以在任何计算机上运行。但是,它通常在运行主应用程序的同一台机器上运行。

然后,应用程序使用其 memcached 客户端与 memcached 服务器通信并请求缓存内容。这比从传统数据库中查询数据要快,因为

  1. memcached 服务器只是将 ID 映射到值,从不需要扫描整个表
  2. memcached 协议更简单。服务端不需要解析 SQL 左右,客户端也不需要精雕细琢。
  3. 由于 memcached 不需要数据库的可靠性(想想备份、故障隔离、集群、安全等),它可以在运行应用程序的同一台机器上运行。虽然您可以在运行应用程序的同一台机器上运行数据库,但由于上述原因,这样做是不受欢迎的。
于 2012-05-26T11:49:17.493 回答