1

我正在运行一个从 MySQL 表中提取数据的 php 脚本。我将在经常访问的服务器上运行它,并希望将数据在缓存中保存 X 时间。所以一旦你拉它,数据就会保存在服务器上,而时间还没有过去。这是脚本:

<?php
include('mysql_connection.php');

$c = mysqlConnect();

$locale = $_GET['locale'];
$last_news_id = $_GET['news_id'];

sendQuery ("set character_set_results='utf8'"); 
sendQuery ("set collation_connection='utf8_general_ci'"); 

if(strcmp($locale,"ru") != 0)
    $locale = "en";
$result = sendQuery("SELECT * FROM news WHERE id > ".$last_news_id." and locale = '".$locale."' ORDER BY id DESC LIMIT 10");
echo '<table width=\"100%\">';
while($row = mysqli_fetch_array($result, MYSQL_NUM))
{
    echo '<tr><td width=\"100%\"><b>Date: </b>'.$row[2].'</td></tr>';
    echo '<tr><td width=\"100%\">'.preg_replace('/#([^#]*)#(.*)/', ' <a href="$2" target="_blank">$1</a>', $row[3]).'</td></tr>';
    echo '<tr><td width=\"100%\"><hr style="height: 2px; border: none; background: #515151;"></td></tr>';
}
echo '</table>';

mysqliClose($c);

?>

使用哪些 php 函数来缓存数据?最好的方法是什么?谢谢!

4

4 回答 4

2

您可以使用 php Memcache:只需将此代码添加到脚本中的“sendQuery()”功能之后,并将其存储在缓存中,如下所示:

$memcache_obj = memcache_connect('memcache_host', 11211);
memcache_set($memcache_obj, 'var_key', $result, 0, 30);
echo memcache_get($memcache_obj, 'var_key');
于 2012-12-27T13:16:00.687 回答
0

Apc/Memcached 可以使用并且通常用于这种类型的事情。您必须注意这种方法可能出现的问题:管理新的插入/更新等等。只要您并不真正关心这些信息,您可以设置数据过期的任意时间间隔,但如果这些信息确实与您的应用程序相关,那么这种方法将不起作用。

此外,mysql 已经缓存了 2 个请求之间未修改的选择,所以基本上,如果您现在执行选择,并且在 10 分钟内使用完全相同的查询进行选择,如果表中没有任何更改,您将从查询中获得结果mysql的缓存。仍然存在发出数据请求和接收数据的开销,但速度极快。默认情况下,这种方法适用于更新/删除问题,因为每当表中的记录发生修改时,相关的查询缓存都会被删除,因此您将获得所有修改原样。

于 2012-12-27T14:19:52.920 回答
0

两个首选解决方案是 APC 和 Memcache。前者也是opcache,后者可以分布式。选择最适合您的。

于 2012-12-27T14:07:07.023 回答
0

事实上,您的数据已经保存在服务器上。
这样的查询应该很快。

所以,这里似乎不需要缓存。特别是如果您没有遇到负载问题但只是以防万一。

于 2012-12-27T14:14:54.597 回答