将瞬变与Memcached结合使用

时间:2011-08-24 作者:Colin Morgan

我希望有人能为我澄清一下在memcached中使用瞬态的问题。

当运行像w3 total cache这样的插件时,使用瞬态存储大型post查询是否有任何实际的性能优势?如果我们正在运行memcached,查询将已经被memcached缓存了,对吗?那么,如果有的话,同时使用这两种方法的好处是什么?

2 个回复
最合适的回答,由SO网友:Otto 整理而成

何时以及如何使用瞬变或对象缓存有点棘手,取决于站点。以下是故障:

不使用持久对象缓存(如memcached)时:

瞬态存储在数据库中,对象缓存中的对象仅在页面请求期间缓存

瞬态存储在对象缓存中,对象缓存中的对象缓存在持久对象缓存中,因此跨页面请求可用

因此,正确的使用时间是:

对于公开发布的代码:

当您必须存储需要一段时间才能生成/检索的内容,并且可以在瞬态过期时重新生成或检索这些内容时,请使用瞬态。因为这可能存储在数据库中,所以无论如何不要将其用于必须从数据库中获取的内容。您节省的时间很少,即使查询是一个包含大量连接之类的大型查询。这要依靠数据库的情报。而是优化查询。

  • 使用对象缓存存储可能经常需要的大型查询的单个结果(例如,帖子或用户),甚至可能在同一页面运行期间。

    如果这是您(自定义)控制的自定义站点的自定义代码,并且您知道它使用的是memcached,那么瞬态和对象缓存基本上是一样的,界面略有不同。所以本质上你根本不需要使用瞬变。在这种情况下,wp\\u cache\\u set和wp\\u cache\\u可以很好地工作,并且不会增加少量的开销。

    对于多站点,对象缓存具有“全局组”的优势,这些组是特定的组(wp\\u cache\\u set的第三个参数),它们被认为是整个站点网络的全局组。您可以使用wp\\u cache\\u add\\u global\\u groups()将组添加到全局分组。

    例如,用户在多站点中全局分组,因为用户表是共享的。因此,这提供了性能加速,因为加载到一个站点上的用户将被放入持久对象缓存中,由用户id设置密钥,并立即在内存缓存中对系统上的所有其他站点可用。换句话说,它们是全球性的。这可以显著提高性能,并且如果您需要网络范围的数据,就不必经常切换到博客。例如,一个最新的帖子插件可以使用全局分组将最新的帖子存储在对象缓存中,然后网络上的每个站点都可以立即知道它,而无需搜索,因为它们正在从共享内存缓存中提取信息。

    TL;DR:您的工作方式在很大程度上取决于您的特定用例,以及您是否计划将代码提供给公众,而公众可能不会共享您的特定设置。

  • SO网友:Rarst

    W3TC做了不同的事情,其中包括:

    缓存数据库查询

    无论是否使用memcached和W3TC,使用瞬态缓存单个数据库查询都没有多大意义。瞬态最好用于片段缓存操作的最终结果(如HTML代码块),而不是中间步骤。

    结束

    相关推荐

    升级到3.1-致命错误:调用未定义的函数wp_cache_get()

    我刚升级到3.1,刷新后出现以下错误:Fatal error: 调用中未定义的函数wp\\u cache\\u get()/public_html/blog/wp-includes/functions.php 在线336快速的谷歌搜索让我this post 然而,在WordPress支持论坛上,我尝试按照建议禁用所有插件,我将TwentyTen作为我唯一的主题。我还设置define(\'WP_CACHE\', false) 在配置中,没有帮助。。。在我尝试回滚之前有什么想法吗?有什么想法吗?