php - 缓存不经常更改的查询结果的最佳技术

标签 php mysql caching

我有一个 php web 应用程序,其中某些数据每周更改一次,但经常被读取。

检索数据的 SQL 查询和用于 html 输出的 php 代码相当复杂。有多个表连接和大量计算 - 但它们会产生一个相当基本的 html 表。对用户进行分组,每周每个组的表都是一样的,不同的组不一样。我可能有数百张表供数千名用户使用。

出于性能原因,我想缓存此数据。我不想在每次有人点击该页面时都运行这些查询和计算,而是希望每周运行一次流程来为每个组生成表格,以便在需要时让我进行简单的阅读。

我很想知道您成功或不成功地使用了哪些技术来实现这样的目标?

我可以看到的选项包括:

  • 将计算的 html 结果存储在 MySQL 表中,由用户组标识
  • 将结果数据存储在 MySQL 表中,由用户组标识(困难,因为没有固定数量的数据项)
  • 在静态文件中缓存页面输出

欢迎任何其他建议!

最佳答案

在生成表的函数中,将结果存储到磁盘上的文件中:

/cache/groups/1.txt
/cache/groups/2.txt

你不一定要为它运行每周一次的批处理作业,当调用函数获取数据时,检查缓存是否过时(或不存在)。如果是这样,则生成并缓存结果。如果没有,就返回缓存文件。

function getGroupTable($groupId) {
    if (cacheIsStale($groupId)) {
        generateCache($groupId);
    }
    return file_get_contents($cacheFile);
}

cacheIsStale() 函数可以只查看 file's timestamps以测试新鲜度。

关于php - 缓存不经常更改的查询结果的最佳技术,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/672029/

相关文章:

php - 防止从php输入时mysql数据库中的数据重复

php - PDO 从 id 获取结果

php - 高级(我的)SQL 查询,这可能吗?

java - 如何使用 Guava 的 CacheBuiler 作为 ConcurrentLRUCache

php - MySQL 匹配搜索中的比较运算符

php - 从登录的社交网络获取访客姓名

c++ - 如何快速检测mysql服务器宕机状态

php - MySQL 搜索和 PHP 结果

html - Web 组件 - 内部浏览器缓存

javascript - JQuery - 事件绑定(bind)和缓存元素