PHP中的高速缓存
我正在VPS上运行应用程序(基于PHP和MySql构建)。我有一个有数百万条记录的文章表。每当用户登录时,我都会显示每个部分的最后50条记录 所以每次使用登录或刷新页面时,它都在执行sql查询以获取这些记录。现在网站上有很多用户,因为我的页面速度明显下降 我对缓存做了一些研究,发现我可以根据第节、第几篇文章(第1节和第50篇文章)读取mysql数据。将其存储在磁盘文件缓存/md5(节号)中 然后,将来当我收到对该部分的请求时,只需从cache/md5(部分号)获取数据 上面的解决方案看起来很棒。但在我继续之前,我真的想澄清以下专家的一些疑问PHP中的高速缓存,php,apache,caching,Php,Apache,Caching,我正在VPS上运行应用程序(基于PHP和MySql构建)。我有一个有数百万条记录的文章表。每当用户登录时,我都会显示每个部分的最后50条记录 所以每次使用登录或刷新页面时,它都在执行sql查询以获取这些记录。现在网站上有很多用户,因为我的页面速度明显下降 我对缓存做了一些研究,发现我可以根据第节、第几篇文章(第1节和第50篇文章)读取mysql数据。将其存储在磁盘文件缓存/md5(节号)中 然后,将来当我收到对该部分的请求时,只需从cache/md5(部分号)获取数据 上面的解决方案看起来很棒。
- 它真的会加速我的应用程序吗(我知道磁盘io比mysql查询快,但不知道有多快…)
- 我目前在我的页面上使用分页,如显示前5篇文章,当用户点击“显示更多”,然后显示下5篇文章等。。。这在mysql查询中很容易实现。如果我把所有记录(50条)都存储在缓存文件中,我不知道该怎么做。如果有人能分享一些信息那就太好了
- 如果您认为上述任何替代解决方案均无效
- 任何开源应用程序,如果你知道的话。(菲律宾)
Raj我遇到了同样的问题,每次页面加载都会导致运行2+个查询。谢天谢地,它们是非常相似的查询,因此缓存(就像您的情况)非常有用 您有两个选择:
我们的实现基本上是通过过滤器运行每个查询;如果它是select语句,则通过将memecached键设置为“namespace_5;[md5 of query]”并将该值设置为包含所有结果行的数组的序列化版本来缓存它。缓存120秒(3分钟)应该足以帮助服务器加载。如果Memecache不是一个可行的解决方案,请将每个部分的所有50篇文章存储为RSS提要。根据站点设计,您可以一次提取所有文章,使用SimpleXML获取每篇文章的内容,并将其包装在站点的文章模板HTML中。数据存在后,使用CSS样式仅显示X篇文章,使用JavaScript进行分页 由于两个进程同时修改同一个文件是个坏主意,因此将新故事添加到一个节会触发一个事件,从而将故事添加到消息队列中。该消息队列将由一个工作者处理,该工作者也使用SimpleXML执行两个连续的操作:
如果您愿意,根据本节,RSS提要可以成为面向公众的功能。谢谢您的OnelyGhost。。。感谢您的回复。我曾想过使用memcached,但我的VPS受到了限制。我只有8GB内存。目前80%的数据被PHP/MYSQL使用。所以我认为这对我来说不是一个好的选择,除非我换到另一台主机或专用服务器,它有更多的ram,比如16到32GB。部分原因是尽可能地利用缓存。运行2个或3个已缓存的简单select查询要比连接这些表的单个查询更好。如果没有其他解决方案,请尝试类似Varnish的解决方案,它可以缓存整个页面。