我正在VPS上运行应用程序(基于PHP和MySql)。我有一张桌子,里面有数以百万计的记录。每当用户登录时,我都会显示每个部分的最后50条记录。
因此,每次使用登录或刷新页面,它都在执行sql查询来获取这些记录。现在有很多用户在网站上,因为我的网页速度已经大大下降。
我做了一些关于缓存的研究,发现我可以根据节no读取mysql数据。条款(第1条和第1条)第50条)。将其存储在磁盘文件缓存/MD5中(第.节)。
之后,当我收到对该部分的请求时,只需从cache/MD5(no部分)获取数据。
上面的解决方案看上去很棒。但在我开始之前,我真的想澄清以下专家提出的几个疑问。
提前谢谢你
你好,拉杰
发布于 2014-01-31 00:27:15
我遇到了同一个问题,每次加载页面都会导致运行2+查询。谢天谢地,它们是非常相似的查询,因此缓存(就像您的情况一样)非常有用。
你有几个选择:
最后,我们选择了这两种方法,安装Memecached及其php扩展以实现查询缓存。Memecached是一个键值存储(类似于PHP的关联数组),它为存储的每个值设置了一个过期时间(以秒为单位)。由于它将所有内容存储在RAM中,所以对于易失性缓存数据的权衡是非常快的读/写时间,比文件系统要好得多。
我们的实现基本上是通过过滤器运行每个查询;如果它是select语句,则通过将memecached键设置为"namespace_md5 of query“来缓存它,并将值设置为包含所有结果行的数组的序列化版本。缓存120秒(3分钟)应该足以帮助服务器负载。
发布于 2014-01-31 03:26:10
如果Memecached不是一个可行的解决方案,那么将每个部分的所有50篇文章存储为RSS提要。您可以一次拉出所有文章,用SimpleXML抓取每篇文章的内容,并按照站点的设计将其包装在站点的文章模板HTML中。一旦数据存在,使用CSS样式只显示X文章,使用JavaScript进行分页。
因为两个进程同时修改同一个文件是个坏主意,所以向节中添加一个新的故事会触发一个事件,这会将故事添加到消息队列中。该消息队列将由一个工作人员处理,它执行两项连续的工作,也使用SimpleXML:
如果您愿意,RSS提要按部分可以是一个面向公众的功能。
https://stackoverflow.com/questions/21470191
复制相似问题