Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 何时使用memcached_Php_Memcached - Fatal编程技术网

Php 何时使用memcached

Php 何时使用memcached,php,memcached,Php,Memcached,我知道memcached是如何工作的。您可以使用它存储数据块来提高站点性能。当您想要检索某些数据时,首先检查它是否在memcached中,如果在memcached中,则检索它,否则检查数据库/文件系统等 我只是不知道如何/何时使用它?什么是好机会 我有以下表格: 作者: id用户名电子邮件密码 电子邮件\u salt电子邮件\u已验证 ip地址 作者(u)线程: 线程id、作者id 线程: id、标题、内容、已创建 标签: 身份证,姓名 线程标记: 线程id,线程id 我想选择最新的30个线程,

我知道memcached是如何工作的。您可以使用它存储数据块来提高站点性能。当您想要检索某些数据时,首先检查它是否在memcached中,如果在memcached中,则检索它,否则检查数据库/文件系统等

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

我有以下表格:

作者:

id用户名电子邮件密码 电子邮件\u salt电子邮件\u已验证 ip地址

作者(u)线程:

线程id、作者id

线程:

id、标题、内容、已创建

标签:

身份证,姓名

线程标记:

线程id,线程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将在何处/如何使用?

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


memcached的一个非常简单的方法是使用SQL查询作为键,将它们各自的结果作为值()。您可能希望在所有高频数据库查询中首先尝试这种方法,并在开始进一步优化之前分析结果。

对于何时使用它,没有既定的指导原则。您必须找出哪些数据库查询最频繁和/或最昂贵,并缓存这些查询。在您的情况下,我可能会缓存该函数调用的结果

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

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

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


。找出您的代码在哪里存在真正的性能问题。识别瓶颈并修复它们。如果修复涉及缓存,那就这样吧,但是首先收集证据

SQL不是已经做过这种类型的查询缓存了吗?还是缓存过期时间很短?非常感谢使用代码分析器的想法。