【问题标题】:Updating DB table when Mysqli result is cached缓存 Mysqli 结果时更新数据库表
【发布时间】:2020-09-15 13:25:34
【问题描述】:

在我的网站上,每天的访问量已经很多,所以我正在考虑从缓存中提供 Mysqli Db 结果。

我正在尝试这样:

$res   = $mysqli->query("/*" . MYSQLND_QC_ENABLE_SWITCH . "*/" . "SELECT * FROM mytable WHERE id = $id");

while ($res->fetch_assoc()) {...}

如果我没记错的话,第一次这个查询将来自数据库,它将被存储到缓存中。而且每一次进一步的调用都只会来自缓存?

我的问题是,如果我在该表中插入另一个数据,它会显示吗?因为它不在缓存中。

【问题讨论】:

  • 你安装了Mysqlnd查询结果缓存插件吗?
  • 还没有,我不知道缓存不是mysqli直接的一部分。

标签: php mysql caching mysqli mysqlnd


【解决方案1】:
  1. “每天已经有很多访问”不是启用缓存的正当理由。
  2. 查询缓存由 mysql
  3. 要使用 MYSQLND_QC_ENABLE_SWITCH,您必须安装特定的 PHP 扩展,我怀疑您是否已经这样做或打算这样做
  4. 与任何其他 3rd 方缓存解决方案一样,Mysqlnd 查询结果缓存插件需要手动失效,这意味着在达到 TTL 之前不会显示新数据。总而言之,这个插件似乎完全没用。
  5. “每天已经有很多访问”不是启用缓存的正当理由,因此您真的应该不理会您的 SQL,并像往常一样优化您的查询

【讨论】:

  • 感谢您澄清这一点!我认为它会更容易和更有用。所以你根本不建议使用 db cache。我认为我的查询已经足够优化,但也有成千上万的来自我的网络和移动应用程序通过我的 API 的调用。我只是想如果我可以从缓存中提供这么多数据,为什么每次都连接到 Db。或者我应该每天通过 CRON 调用一次数据库并将所有数据写入 TXT 文件,至少移动应用用户可以访问该文件以提高服务器性能。
  • 我真的不明白这个思路。为什么你认为数据库比 txt 文件差那么多?事实上,它是一个 txt 文件,比数据库差得多,而这个事实是数据库存在的唯一原因。因为它们优于txt文件。总而言之,您似乎正在解决一个虚构的问题。不要
  • 我有许多 PHP 条件、脚本和过滤器以及需要运行以创建最终 API 文件的 DB 调用。如果它每天只运行一次,所有数据都将在 txt 文件中“准备好”,无需运行脚本并连接到数据库,这将释放服务器进程。这是我的想法。这不仅仅是一个数据库调用。首先,我只是想缓存数据库结果,但仍在决定如何提高性能。我仍然认为从 txt 文件访问准备好的数据或 json 可以更快地访问 PHP 文件,该文件将实时汇总这些数据。但也许我错了
  • 所以无论如何它都不是“查询缓存”。猜猜你必须先下定决心,你需要什么样的缓存。也许你可以只生成一组静态文件,它会非常快。
  • 首先我只想要查询缓存,但根据这里的答案和安装插件等,我不再感兴趣了。
猜你喜欢
  • 2012-11-17
  • 1970-01-01
  • 1970-01-01
  • 2017-07-03
  • 1970-01-01
  • 2016-04-22
  • 1970-01-01
  • 1970-01-01
  • 2013-04-16
相关资源
最近更新 更多