12

是否可以在多个项目之间共享一个 Memcache 实例。

假设我在一个项目中将一个对象推送到内存缓存中,我是否可以从不同的项目中检索相同的对象。?

4

4 回答 4

14

Memcache 只是一个内存存储。它可以跨多台机器运行。两个完全不同的进程没有理由不能通过它相互通信。

让我澄清一下。您可以在一台或多台服务器上运行 memcache。您可以将您的客户端配置为与一组特定的实例对话。您可以在同一主机上运行两个(或更多)不同的 memcache 进程(监听不同的 IP 地址和/或端口),它们是完全独立的。

如果您的两个应用程序与同一个实例通信,那么它们没有理由无法通信。

如果您与多个实例通信并对数据进行分区(即,将其拆分为不同的实例),那么您的客户需要知道从哪个实例获取数据或将数据放入哪个实例。如果您使用相同的客户端库(例如,您的两个客户端都是 PHP5),那么这不是戏剧。如果它们不相同,那么您必须以某种方式处理该问题。

如果您使用不同的技术,另一个问题是您必须考虑交换格式,因为 PHP 中的自定义序列化在 Java 或 C# 中不会那么可读。典型的选择是 XML 甚至 JSON。

于 2009-02-13T11:32:49.960 回答
4

是的,只要每个项目以相同的方式配置memcache节点,并以相同的方式为缓存元素生成key,它们就可以共享数据。

于 2009-02-13T11:50:02.757 回答
0

如果您担心安全问题(一个应用程序读取另一个应用程序的数据)或应用程序之间的缓存中毒,那么这些都是可能的。

如果要在应用程序之间隔离 memcache,则可以在单个服务器上运行多个 memcached 守护程序,每个守护程序使用服务器的一部分内存。每个实例在不同的端口号上运行。您可以使用防火墙规则来确保只有特定的应用程序服务器才能访问特定的 memcache 端口,以确保应用程序无法读取或毒害对方的数据。

于 2012-08-04T08:52:36.300 回答
0

对于每个项目,我都会提供一种方法来按名称空间生成键和分区项目。因此,对于项目 B 中的 key = foo,它由 A.foo 存储/获取,而项目 B 中的 foo 称为 B.foo 等。

这样它应该可以工作。然而,当涉及到生产时,这种方法非常不受欢迎,因为你可能会陷入调试的地狱(性能/可靠性等)。

更好的方法是在不同的端口上运行多个 memcache 实例,恕我直言,这更干净。

于 2012-10-04T19:04:33.563 回答