首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在PHP中缓存以加速

在PHP中缓存以加速
EN

Stack Overflow用户
提问于 2014-01-31 00:09:28
回答 2查看 57关注 0票数 0

我正在VPS上运行应用程序(基于PHP和MySql)。我有一张桌子,里面有数以百万计的记录。每当用户登录时,我都会显示每个部分的最后50条记录。

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

我做了一些关于缓存的研究,发现我可以根据节no读取mysql数据。条款(第1条和第1条)第50条)。将其存储在磁盘文件缓存/MD5中(第.节)。

之后,当我收到对该部分的请求时,只需从cache/MD5(no部分)获取数据。

上面的解决方案看上去很棒。但在我开始之前,我真的想澄清以下专家提出的几个疑问。

  • 它真的会加速我的应用程序(我知道磁盘io比mysql查询快,但不知道有多少..)
  • 我目前正在我的页面上使用分页,如显示前5篇文章,当用户点击“显示更多”,然后显示接下来的5篇文章等等。这在mysql查询中很容易实现。如果我将所有记录(50)存储在缓存文件中,我不知道该如何处理。如果有人能分享一些信息那就太好了。
  • 任何替代的解决方案,如果你相信上面是行不通的。
  • 任何开源应用如果你知道的话。(PHP)

提前谢谢你

你好,拉杰

EN

回答 2

Stack Overflow用户

发布于 2014-01-31 00:27:15

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

你有几个选择:

  1. 将数据库卸载到同一网络上的单独VPS,以便根据需要将其向上和向下扩展。
  2. 缓存来自每个查询的数据,并在访问数据库之前尝试从缓存中检索

最后,我们选择了这两种方法,安装Memecached及其php扩展以实现查询缓存。Memecached是一个键值存储(类似于PHP的关联数组),它为存储的每个值设置了一个过期时间(以秒为单位)。由于它将所有内容存储在RAM中,所以对于易失性缓存数据的权衡是非常快的读/写时间,比文件系统要好得多。

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

票数 0
EN

Stack Overflow用户

发布于 2014-01-31 03:26:10

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

因为两个进程同时修改同一个文件是个坏主意,所以向节中添加一个新的故事会触发一个事件,这会将故事添加到消息队列中。该消息队列将由一个工作人员处理,它执行两项连续的工作,也使用SimpleXML:

  1. 删除XML文件末尾最古老的故事。
  2. 将消息队列中的一个较新的故事添加到XML文件的顶部

如果您愿意,RSS提要按部分可以是一个面向公众的功能。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21470191

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档