PHP中的高速缓存

PHP中的高速缓存,php,apache,caching,Php,Apache,Caching,我正在VPS上运行应用程序(基于PHP和MySql构建)。我有一个有数百万条记录的文章表。每当用户登录时,我都会显示每个部分的最后50条记录 所以每次使用登录或刷新页面时,它都在执行sql查询以获取这些记录。现在网站上有很多用户,因为我的页面速度明显下降 我对缓存做了一些研究,发现我可以根据第节、第几篇文章(第1节和第50篇文章)读取mysql数据。将其存储在磁盘文件缓存/md5(节号)中 然后,将来当我收到对该部分的请求时,只需从cache/md5(部分号)获取数据 上面的解决方案看起来很棒。

我正在VPS上运行应用程序(基于PHP和MySql构建)。我有一个有数百万条记录的文章表。每当用户登录时,我都会显示每个部分的最后50条记录

所以每次使用登录或刷新页面时,它都在执行sql查询以获取这些记录。现在网站上有很多用户,因为我的页面速度明显下降

我对缓存做了一些研究,发现我可以根据第节、第几篇文章(第1节和第50篇文章)读取mysql数据。将其存储在磁盘文件缓存/md5(节号)中

然后,将来当我收到对该部分的请求时,只需从cache/md5(部分号)获取数据

上面的解决方案看起来很棒。但在我继续之前,我真的想澄清以下专家的一些疑问

  • 它真的会加速我的应用程序吗(我知道磁盘io比mysql查询快,但不知道有多快…)
  • 我目前在我的页面上使用分页,如显示前5篇文章,当用户点击“显示更多”,然后显示下5篇文章等。。。这在mysql查询中很容易实现。如果我把所有记录(50条)都存储在缓存文件中,我不知道该怎么做。如果有人能分享一些信息那就太好了
  • 如果您认为上述任何替代解决方案均无效
  • 任何开源应用程序,如果你知道的话。(菲律宾)
先谢谢你

问候,,
Raj

我遇到了同样的问题,每次页面加载都会导致运行2+个查询。谢天谢地,它们是非常相似的查询,因此缓存(就像您的情况)非常有用

您有两个选择:

  • 将数据库卸载到同一网络上的单独VPS,以便根据需要进行上下扩展

  • 缓存每个查询中的数据,并在命中数据库之前尝试从缓存中检索

  • 最后,我们选择了两者,安装memecache及其php扩展用于查询缓存。memecache是一个键值存储(很像PHP的关联数组),它为存储的每个值设置了一个以秒为单位的过期时间。由于它将所有内容都存储在RAM中,因此对易失性缓存数据的权衡是读/写速度极快,比文件系统好得多


    我们的实现基本上是通过过滤器运行每个查询;如果它是select语句,则通过将memecached键设置为“namespace_5;[md5 of query]”并将该值设置为包含所有结果行的数组的序列化版本来缓存它。缓存120秒(3分钟)应该足以帮助服务器加载。

    如果Memecache不是一个可行的解决方案,请将每个部分的所有50篇文章存储为RSS提要。根据站点设计,您可以一次提取所有文章,使用SimpleXML获取每篇文章的内容,并将其包装在站点的文章模板HTML中。数据存在后,使用CSS样式仅显示X篇文章,使用JavaScript进行分页

    由于两个进程同时修改同一个文件是个坏主意,因此将新故事添加到一个节会触发一个事件,从而将故事添加到消息队列中。该消息队列将由一个工作者处理,该工作者也使用SimpleXML执行两个连续的操作:

  • 删除XML文件末尾最早的故事

  • 将消息队列中给出的较新故事添加到XML文件的顶部


  • 如果您愿意,根据本节,RSS提要可以成为面向公众的功能。

    谢谢您的OnelyGhost。。。感谢您的回复。我曾想过使用memcached,但我的VPS受到了限制。我只有8GB内存。目前80%的数据被PHP/MYSQL使用。所以我认为这对我来说不是一个好的选择,除非我换到另一台主机或专用服务器,它有更多的ram,比如16到32GB。部分原因是尽可能地利用缓存。运行2个或3个已缓存的简单select查询要比连接这些表的单个查询更好。如果没有其他解决方案,请尝试类似Varnish的解决方案,它可以缓存整个页面。