如果我最终在一台服务器上有4个或5个中型站点,我想确保每个需要memcached的站点都至less有一个分配的空间。 有一个简单的方法来做到这一点? 想到的唯一方法就是在每个端口的不同端口上分别进行处理。 有一个更容易/其他方式? 我只是不想让一个站点占用Memcached的所有内存。
我有大量的内存,并说我想给我的一个magento网站正好512mb的memcached。 我也想给memcached另外一个自定义的应用程序512Mb。 想法?
Memcached没有名称空间,分区或类似的概念。 因此唯一的办法就是运行memcached的多个实例。 这是没有问题的,尽pipememcached是非常简单的设置(有目的地)。
例如,它可以绑定到5个不同的端口(一个用于到达站点)或5个不同的IP地址。
这里看一个例子: http : //blog.nevalon.de/en/wie-kann-ich-mehrere-instanzen-von-memcached-auf-einem-server-laufen-lassenhow-can-i-run-multiple-实例-的-memcached的一对一的服务器- 20090729
我同意尼尔在这里。 其他的可能性是你可以使用私有IP空间。 假设您的服务器可以分配4个IP 10.xx1到4.您可以使用4个服务器启动Memcached,并绑定到每个IP,从而为所有站点提供相同的端口但不同的memcache IP。
最重要的是,您可以修改memcached的init脚本来启动所有4台服务器,并一次性停止它们。 这可以与IP或Port绑定方法一起使用。 这将大大简单的事情给你。
这里是一个多个服务器的例子多个Memcached服务器/etc/init.d启动脚本的作品? (请参阅问题脚本源)。
memcached需要单独的进程有一个原因,它更多的是内存pipe理,而不是memcached本身。 单独的进程共享内存似乎不是一个好主意。 内存pipe理最好留给系统。
这根本没有必要。 如果你认为memcache存储实际上是作为LRU堆栈的,那么显而易见的是,给站点的内存的一部分是不太理想的,当应该被memcached的站点更多的时候会占用较less的内存部分,推出更多的时间比需要更多的时间,而网站接收较less的stream量将有更less的未使用的数据存储在该专用部分可能已被更好地用于更活跃的网站,而不是使用memcachedlogging需要达到的数据在一些SQL后端。
我同意这里的两个回应,但是想增加更多的意见。
我不认为有一种方法可以在单个memcache实例中拆分命名空间对象和关联的RAM使用。 所以就像其他答案最好运行多个实例。
虽然这可能是一个容易的任务,如果这是一个大规模这些也可能是很好的资源来看:
https://github.com/twitter/twemproxy
允许您在memcache前面设置代理。 这意味着所有的站点/客户端连接到在整个memcache池中进行负载平衡的胡桃夹subprocess。
http://code.google.com/p/moxi/
另一种代理解决scheme负载平衡memcache。
所以这又取决于基础设施的规模,但这些可能是在更大或增长的基础设施中对您有帮助的工具。 将这些分离出来可以让你有几个更小的实例,而不是为每个站点添加一个新的512MB实例,你可以坚持更小的说64MB实例,并以更小的速度扩展。
Memcache对于Magento商店来说消耗的内存不会超过32MB。 当你考虑每个caching页面大概在4Kb左右时 – 你已经有了一些caching内容的空间。
我build议使用unix套接字(比TCP / IP更快,更安全)设置多个Memcached实例。 您可以使用以下标志启动Memcached
-d -m 32 -u myuser -s /home/myuser/cache.sock -a 0700
您的memcache local.xmlconfiguration将如下所示,并阅读本文以了解为什么slow_backend是必需的 – http://www.sonassi.com/knowledge-base/magento-kb/what-is-memcache-actually-caching-在-Magento的/
<cache> <slow_backend>database</slow_backend> <fast_backend>Memcached</fast_backend> <fast_backend_options> <servers> <server> <host>unix:///home/myuser/cache.sock</host> <port>0</port> <persistent>0</persistent> </server> </servers> </fast_backend_options> <backend>memcached</backend> <memcached> <servers> <server> <host>unix:///home/myuser/cache.sock</host> <port>0</port> <persistent>0</persistent> </server> </servers> <compression><!--[CDATA[0]]></compression--> <cache_dir><!--[CDATA[]]></cache_dir--> <hashed_directory_level><!--[CDATA[]]></hashed_directory_level--> <hashed_directory_umask><!--[CDATA[]]></hashed_directory_umask--> <file_name_prefix><!--[CDATA[]]></file_name_prefix--> </file_name_prefix></hashed_directory_umask></hashed_directory_level></cache_dir></compression></memcached> </cache>
如您所怀疑的,最简单的方法是拥有多个memcached实例。 memcache有目的地保持尽可能简单的速度,所以不提供像你正在寻找的内部的分离forms。 由于相同的原因,它甚至不提供任何forms的身份validation!