我正在为我的应用程序编写一个Web服务,并希望了解处理可能获得的大量请求的最佳方法。很多数据可能不会在一天内发生变化,但是我正在编写的特定脚本会产生3个MySQL查询,考虑到数据可能与上一次对脚本的请求相同,如果它不是同样的,这没什么大不了的。
如果我将输出XML / JSON保存到文件然后在一天内将其提供给请求者,然后在第二天的第一个请求中覆盖它,性能会好得多吗?这样做的最佳方式是什么?
我知道Joomla和phpBB以及其他MySQL密集型应用程序都使用缓存,以便不会生成尽可能多的MySQL查询,所以这就是让我思考的问题。
编辑 - 忘记提及我在Windows / IIS 7.0上
答案 0 :(得分:8)
在您需要之前,请不要使用缓存。 Memcache经常是一个不成熟的优化,应该是你的最后一个,而不是第一个。添加这种缓存可能会导致复杂的一致性问题。
数据库本质上并不慢,当然也不比从平面文件加载一堆缓存数据慢。但是滥用它们可能会很慢。例如,如果您的每个页面查询之一写入MyISAM表,或者执行无索引查询,或者您的某个查询只是复杂而困难。首先通过修复架构来攻击这些情况。
答案 1 :(得分:6)
您应该查看memchached:通过PHP的memcache或memcached
访问它Memcache模块为memcached,高效缓存守护程序提供了方便的过程和面向对象的接口,该守护程序专门用于减少动态Web应用程序中的数据库负载。
它的设计完全符合您的需求,并被许多高性能Web应用程序使用。
开发Memcached是为了提高LiveJournal.com的速度,LiveJournal.com是一个已经为100万用户每天做2000万次动态页面浏览的网站,拥有一堆网络服务器和一堆数据库服务器。 memcached的引入极大地降低了数据库负载。
注意强>
PHP中有两(2)个客户端库。有关这方面的更多讨论可以在serverfaul.com上找到:memcache-vs-memcached这里是comparison
答案 2 :(得分:3)
快速而肮脏的方式就是这样。
1. create a cachefilename for this specific url
2. check if such a file exists in the cache directory and if it is younger than n minutes
2.1 if not:
2.2 // business logic goes here => Save output e.g. in a variable $output
2.3 save contents of $output in cachefilename
2.4 echo $output
3. if so:
3.1 $output = file_get_contents(cachefilename)
3.2 echo $output
它可能不如memcache或memcached那么优雅,但你几乎可以在任何地方使用它。
答案 3 :(得分:1)
Memcached很棒,但对你的意图可能有些过分。像Martin提出的基于文件的缓存方法可以正常工作。 PHP的文件级别有许多现成的缓存库。