【问题标题】:When to use memcached何时使用 memcached
【发布时间】:2011-03-27 18:57:10
【问题描述】:

我有点明白 memcached 是如何工作的。您可以使用它存储大量数据来提高站点性能。当你想检索一些数据时,你首先检查它是否在 memcached 中,如果是,那么你检索它,否则你检查你的数据库/文件系统等。

我只是不知道如何/何时使用它?什么是好机会?

我有以下表格:

作者:

id 用户名 电子邮件 密码 salt email_salt email_verified ip_address

作者线程:

thread_id, author_id

线程:

id、标题、内容、创建

标签:

身份证,姓名

线程标签:

tad_id,thread_id

我想选择最新的 30 个主题、它们的作者和它们的所有标签。这是我使用的 SQL 语句:

       SELECT thread.title, thread.id as thread_id,
       thread.content, author.username, author.id as author_id,
       GROUP_CONCAT(DISTINCT tag.name ORDER BY tag.name DESC SEPARATOR ',') AS tags
       FROM thread 
       JOIN thread_tags ON thread.id = thread_tags.thread_id
       JOIN tag ON thread_tags.tag_id = tag.id

       JOIN author_threads ON thread.id = author_threads.thread_id
       JOIN author ON author_threads.author_id = author.id

       GROUP BY thread.id DESC
       LIMIT 0, 30

这是我使用的 PHP:

function get_latest_threads($link, $start)
{

   $start = minimal_int($start);

   $threads = sql_select($link, "SELECT thread.title, thread.id as thread_id,
                                 thread.content, author.username, author.id as author_id,
                                 GROUP_CONCAT(DISTINCT tag.name ORDER BY tag.name DESC SEPARATOR ',') AS tags
                                 FROM thread 
                                 JOIN thread_tags ON thread.id = thread_tags.thread_id
                                 JOIN tag ON thread_tags.tag_id = tag.id

                                 JOIN author_threads ON thread.id = author_threads.thread_id
                                 JOIN author ON author_threads.author_id = author.id

                                 GROUP BY thread.id DESC
                                 LIMIT $start, 30"  # I only want to retrieve 30 records each time
                        );

   return $threads;

}

memcached 在哪里/如何使用?

【问题讨论】:

    标签: php memcached


    【解决方案1】:

    我只是不知道如何/何时使用它?

    只有在您证明添加缓存是您可以获得的最佳性能提升后才使用它。向以前没有任何类型缓存的复杂应用程序添加数据缓存或输出缓存可能会发现大量细微的错误和奇怪的行为。

    Use a code profiler first。找出您的代码存在真正性能问题的地方。识别瓶颈并修复它们。如果该修复涉及缓存,那就这样吧,但首先收集证据

    【讨论】:

    • 非常感谢使用代码分析器的想法。
    【解决方案2】:

    没有关于何时使用它的既定准则。您必须弄清楚哪些数据库查询最频繁和/或成本最高,并缓存这些查询。在您的情况下,我可能会缓存该函数调用的结果。

    我会感到困惑的地方(你可能会)是在创建新线程时会做什么。每次有人创建线程时,您的查询都会给出不同的结果。因此,在这种情况下,当有人创建线程时,您应该做的是更新数据库,然后通过踢出最旧的线程并添加新线程来调整缓存中的结果集。您甚至不需要从缓存中重新加载最新的 30 个线程,因为它会被更新。

    【讨论】:

      【解决方案3】:

      您的许多站点用户可能会请求最新线程列表,因此使用 memcached 缓存整个 SQL 结果听起来是一个绝佳的机会。

      一种非常简单的 memcached 方法是使用 SQL 查询作为键,将它们各自的结果作为值 (i.e. see this tutorial here)。在开始进一步优化之前,您可能想先对所有高频数据库查询进行尝试并分析结果。

      【讨论】:

      • SQL 不是已经做了那种类型的查询缓存了吗?还是那里的缓存过期时间很短?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-22
      • 2021-01-26
      • 1970-01-01
      相关资源
      最近更新 更多