2

我的所有网站都使用 nginx、memcached 和 APC。我托管的是一个 wordpress 网站、一个 vBulletin 论坛和其他一些网站。

我已经设置了 nginx 和 memcached,以便 nginx 首先检查 memcached 服务器以查看它是否有完整页面的条目,如果它没有将请求传递给 PHP 并缓存整个页面 - 然后将其显示给用户,配置见链接:http: //pastebin.com/ZFSrA9e5

目前 vBulletin 论坛正在使用“$config['Datastore']['class'] = 'vB_Datastore_Memcached';” 并且 WP 博客正在使用 Memcached 对象缓存 (http://wordpress.org/extend/plugins/memcached/)

我目前仅将 WP 缓存为 memcached 中的整页(如上所述),以查看是否遇到任何问题 - 到目前为止一切都很好。

我想要实现的是良好的加载时间和低负载。我遇到的问题/我遇到的问题是:

  1. 我怎么知道例如用户第一次登录,memcached 缓存了第一个用户的请求。然后下一个用户来了,memcached 为第一个用户提供缓存页面 - 有什么考虑/防止这种情况吗?

  2. memcached/nginx 如何/何时刷新全站点缓存以更新缓存?

  3. 我是否建议同时运行 APC 和 memcached?据我所知;memcached 缓存小值,apc 缓存编译后的 PHP 代码,对吗?

如果有人能在这些问题上启发我,那就太棒了。

4

1 回答 1

1

1)您的缓存响应完全取决于此:

set $memcached_key "wordpress:$request_uri";

因此,每个缓存条目仅依赖于 URI,而用户身份验证信息没有意义。第二个请求将与第一个请求相同,因为它将具有相同的内存缓存键。如果要为每个登录的用户存储单独的缓存键,则需要设置更多不同的键,如下所示:

set $memcached_key "wordpress:$request_uri$scheme$host$cookie_PHPSESSID";

2) 这取决于 WP 插件。Nginx 从不刷新缓存,要进行强制刷新,您需要重新启动 memcache。

3) 是的,它们都做不同的事情,APC 缓存已编译的 PHP 代码,因此不必每次请求都编译(它只在服务器重启或更改 php 文件时重新编译)。Memcache 将页面的某些部分或整个页面(您的场景)存储在内存中,当在 memcache 中找到 nginx 提供的 KEY 时,甚至不涉及 PHP - 整个页面直接从 memcahced 内存提供。

希望这可以帮助)

于 2012-11-27T14:44:29.360 回答