我想实现一个两遍缓存系统:
第一遍生成一个PHP文件,其中包含硬编码的所有常见内容(例如新闻项).然后数据库有一个缓存表来链接这些页面(例如"index.php page = 1 style = default"),数据库还存储一个uptodate字段,如果为false则导致第一次传递在下一次页面重新运行被观看了.
第二遍填写次要细节,例如多久以前的东西(?),以及可变项目,例如"你以......登录".
但是,我不确定一个有效的实现,它支持缓存和非缓存(例如,搜索)页面,没有大量的代码和几个查询.
现在每次加载页面时,PHP脚本都会重新生成页面.对于像搜索这样的页面,这很好,因为大多数搜索是不同的,但对于其他页面,例如索引,这对于每个命中几乎是相同的,但是生成大量查询并且是相当长的脚本.
问题是页面的某些部分会根据每个用户进行更改,例如"您已登录为..."部分,因此只需保存生成的页面仍然会产生10,000个几乎相同的页面.
主要关注的是减少服务器上的负载,因为我在共享主机上并且此时无法承受升级,但是该站点正在使用相当大一部分服务器CPU +对MySQL进行公平加载服务器.
所以基本上最小化每个页面请求需要做多少,而不是像索引那样一直是一个好的开始,而不是重新生成像索引上的新闻一样的东西.
我实际上认为将新闻项目硬编码为纯HTML,但这意味着在几个地方维护它们(因为它们可能用于搜索,而评论在专用于该新闻项目的页面上(即news.php)等) .
我是第二个Ken对PEAR的Cache_Lite库的记录,您可以使用它来轻松缓存页面的一部分或整个页面.
如果您正在运行自己的服务器,我强烈推荐使用memcached.它更快,因为它完全在内存中运行,并被许多大容量站点广泛使用.这是一个非常简单,稳定,无故障的守护进程.就你的PHP代码而言,你可以像使用Cache_Lite一样使用它来缓存各种页面部分或整个页面(或其他任意数据块),而且它很容易使用,因为PHP 内置了一个memcache接口.
对于超高流量的整页缓存,请查看将Varnish或Squid作为缓存反向代理服务器.(由Varnish提供服务的页面的出现速度比使用PHP解释器的任何内容快100倍.)
请记住缓存,您实际上只需要缓存经常访问的内容.有时,当您不需要时,可能会成为制定真正复杂的缓存策略的陷阱.对于像您的主页那样每秒被击中几次的页面,您肯定希望优化它以提高速度; 对于一个每小时可能有几次点击的页面,就像一个月大的博客文章,缓存它是一个坏主意,你只会浪费你的时间,让事情变得更复杂,容易出错.