是否可以在多个项目之间共享一个Memcache的单个实例。
假设我在一个项目中将memcache中的一个对象推送出来,我是否可以从另一个项目中检索相同的对象。 ?
答案 0 :(得分:14)
Memcache只是一个内存存储。它可以在多台机器上运行。没有理由说两个完全不同的过程不能通过它相互交谈。
让我澄清一下。您可以在一台或多台服务器上运行memcache。您可以将客户端配置为与特定的一组实例通信。您可以在同一主机上运行两个(或更多)不同的内存缓存进程(侦听不同的IP地址和/或端口),它们完全独立。
如果您的两个应用程序与同一个实例通信,那么他们就没有理由不能进行通信。
如果您与多个实例通信并对数据进行分区(即将其分配到不同的实例),则会出现复杂情况,然后您的客户端需要知道从哪个实例获取数据或将数据放入其中。如果您使用相同的客户端库(例如,您的客户端都是PHP5),那么这不是戏剧性的。如果它们不一样,那么你必须以某种方式解决这个问题。
如果您使用不同的技术,另一个问题是您必须考虑交换格式,因为PHP中的自定义序列化在Java或C#中不会如此可读。典型的选择是XML甚至是JSON。
答案 1 :(得分:4)
是的,只要每个项目以相同的方式配置memcache节点,并以相同的方式为缓存元素生成密钥,它们就可以共享数据。
答案 2 :(得分:0)
如果您担心安全问题(一个应用程序读取另一个数据)或缓存应用程序之间的中毒,这些都是可能的。
如果要在应用程序之间隔离memcache,则可以在单个服务器上运行多个memcached守护程序,每个守护程序使用服务器内存的一部分。每个实例都运行在不同的端口号上。您可以使用防火墙规则来确保只有特定的应用程序服务器才能访问特定的内存缓存端口,以确保应用程序无法读取或中断彼此的数据。
答案 3 :(得分:0)
对于每个项目,我将提供一种按命名空间生成密钥和分区项目的方法。 因此对于来自项目B的key = foo,它由A.foo存储/提取,而来自项目B的foo被称为B.foo等。
这样它应该有效。 然而,当生产时,这种方法非常气馁,因为你可能在调试(性能/可靠性等)。
更好的方法是在不同的端口上运行多个memcache实例,这是更加干净的恕我直言。