性能问题(缓存) - 更快地从数据库进行计算或存储它们

时间:2014-09-09 16:36:05

标签: php html mysql database performance

问题略有改变,但核心保持不变。这是问题所在:

每次用户访问该页面时,服务器都会从Setting表中提取数据,使用php函数处理它,并以这种方式在html页面上向用户显示结果:md5(result_string+users_ip_address)

Setting表每小时更改一次。因此,result_string每小时更改一次。

不幸的是,由于计算复杂,获取result_string需要一些时间(10秒)。

对于任何用户而言,显示md5(result_string+ip_address)的速度比10秒内更快?

环境:MySQL,php。

3 个答案:

答案 0 :(得分:1)

在设置表中添加日期时间字段以存储上次更新的时间。

然后,在php中,设置一个cookie,其过期日期设置为您的设置表的下一个预定更新(在这种情况下为一小时):

if ( isset($_COOKIE["result_string"]) ){
   $result_string = $_COOKIE["result_string"];
}else{
   $ip_addres = getIp();
   $row = getRecordFromSettingTable();
   $result_string = md5($row->result_string+$ip_address)
   setcookie("result_string", $value, strtotime($row->last_update)+3600);
}

希望它有所帮助。

答案 1 :(得分:1)

步骤1:创建新表或文件,并将result_string的值保存在该文件/ db表中。

步骤2:更新设置表的代码,在文件/ db表中附加更新result_string值逻辑的代码。

步骤3:将代码更改为始终从新文件/ db表中获取值。

答案 2 :(得分:1)

1。)如果“结果”字符串仅在“设置”表更改时更改。始终计算“结果”字符串,然后保存到表格中。

2。)否则通过将结果字符串写入磁盘来缓存结果字符串,并且每小时只计算一次。

filemtime($filename)-time()
file_put_contents($filename,$data)
file_get_contents($filename)

对此非常有帮助。