我有一个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()
函数可以只查看文件的时间戳来测试新鲜度.
确实有一些选择:
每周预呈现页面,然后"静态地"为它们服务.
使用缓存(例如Squid)在第一次机会的基础上缓存这样的响应一周.例如,您可以配置缓存策略,以便转到特定页面的请求(例如,very_long.php?...)与网站的其余部分分开缓存.
确保打开数据库缓存.MySQL具有自己的缓存,您可以对其进行微调,以便不重新计算重复的长查询.