【问题标题】:Constantly updating numbers不断更新数字
【发布时间】:2012-05-09 00:10:31
【问题描述】:

我想在页面上创建一个类似1,299,282 images viewed 的数字。数字 1,299,282 将从数据库表中获取,作为自动递增列 id 中的最大数字,使用 select max(id) from listings

此数字不需要在不重新加载页面的情况下更新 AJAX 样式,但如果最大 id 确实变大了,理想情况下会在页面重新加载时更改。

有没有办法缓存这个,因为这个数字每 10 分钟才会改变一次。或者缓存这个工作量太大?

【问题讨论】:

  • 是否应该缓存它取决于页面加载次数和更新次数之间的比率(以及每个更新的相对成本)。
  • a select max(id) 不会有太多开销。但是将数字写出文件或其他缓存机制可能会花费与保存任何东西一样多的成本。你只缓存具有高生成成本和低检索成本的东西。单个数字通常不是一个好的候选者,尤其是当它是一个微不足道的检索操作时
  • 我认为更新数据库的代码应该注意更新这个数字或缓存它!所以当某些页面加载时,它不必访问数据库,只需检查缓存的值。
  • +1 Marc,这是一个很好的观点。
  • Melsi,系统的紧密耦合通常是一件坏事。假设您需要换出数据库或缓存后端。您不希望这些单独的事物耦合在一起。

标签: php javascript jquery mysql codeigniter


【解决方案1】:

如果您只在页面重新加载时这样做,请执行以下操作:

$sql = "SELECT * FROM `LISTINGS` ORDER BY `ID` Desc Limit 1;";
$result = mysql_query($sql);
while($row = mysql_fetch_assoc($result)) {
   $mynumber = $row['ID'];
}

echo $mynumber;

这将为您提供数据库中最大的 ID 号。如果它上升,它会在页面重新加载并再次运行脚本时显示它。

编辑:真的不需要缓存,因为这是一个非常轻量级的脚本。

【讨论】:

  • 为什么order and limit而不是选择Max(id)?
  • 我猜 max(id) 会更合适一些,这就是我过去的做法。
【解决方案2】:

你为什么要为此使用循环。只需简单使用即可。

$sql = "SELECT MAX(`ID`) FROM `LISTINGS`";
$result = mysql_query($sql);
$row = mysql_fetch_assoc($result);
$mynumber = $row['ID'];

echo $mynumber;

【讨论】:

    【解决方案3】:

    关于缓存部分,见that answerMeta Cache or CodeIgniter Cache问题。

    【讨论】:

      猜你喜欢
      • 2019-03-24
      • 1970-01-01
      • 2012-08-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多