如果我最终在一台服务器上拥有 4 或 5 个中型网站,我希望确保每个需要 memcached 的网站至少分配有空间。有没有简单的方法可以做到这一点?我能想到的唯一方法是为每个网站在不同的端口上设置单独的进程。有没有更简单/其他的方法?我只是不想让一个网站占用 memcached 的所有内存。
我有大量内存,我想为我的一个 magento 网站分配 512mb 内存用于 memcached。我还想为另一个自定义应用程序分配 512mb 内存用于 memcached。有什么好主意吗?
答案1
Memcached 没有命名空间、分区或类似概念。因此,唯一的方法是运行多个 memcached 实例。不过这没有问题,因为 memcached 的设置非常简单(故意的)。
例如,它可以绑定到 5 个不同的端口(一个用于到达站点)或 5 个不同的 IP 地址。
答案2
我同意 Niall 的观点。另一种可能性是,您可以使用私有 IP 空间。假设您的服务器可以分配 4 个 IP,从 10.xx1 到 4。您可以启动带有 4 个服务器的 Memcached 并绑定到每个 IP,从而为所有站点提供相同的端口,但不同的 memcache IP。
除此之外,您还可以修改 memcached 的 init 脚本,以便一次性启动并停止所有 4 个服务器。这可以与 IP 或端口绑定方法一起使用。它将大大简化您的工作。
以下是一次使用多个服务器的示例多个Memcached服务器的/etc/init.d启动脚本有效吗?(参见问题脚本来源)。
memcached 需要单独进程是有原因的,这更多地与内存管理有关,而不是 memcached 本身。单独进程共享内存似乎不是一个好主意。内存管理最好留给系统。
答案3
这完全没有必要。如果你认为 memcache 存储实际上是最小可用单元stack,那么很明显,将一部分内存分配给使用较少的站点并不是最优的,因为应该使用更多 memcached 的站点将拥有较小的内存部分,并且它的记录将比需要的更频繁地被推出,而接收流量较少的站点将有更多较少的未使用数据存储在专用部分,而这些内存本可以更好地用于更活跃的站点,这些站点不需要使用 memcached 记录,而是需要在某些 SQL 后端获取数据。
答案4
无论如何,Memcache 极不可能为 Magento 商店消耗超过 32MB 的 RAM。考虑到每个缓存页面大约为 4Kb,缓存内容的范围就相当大了。
我建议使用 unix 套接字设置多个 Memcached 实例(它比 TCP/IP 更快、更安全)。您可以使用以下标志启动 Memcached
-d
-m 32
-u myuser
-s /home/myuser/cache.sock
-a 0700
你的 memcache local.xml 配置看起来应该是这样的,阅读一下可以了解为什么 slow_backend 是必要的 -http://www.sonassi.com/knowledge-base/magento-kb/what-is-memcache-actually-caching-in-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>