【问题标题】:Which caching technique to be used for apache phpapache php 使用哪种缓存技术
【发布时间】:2014-09-01 07:21:54
【问题描述】:

目前我正在为我的网站使用共享托管域。但我们目前在其中一个表中有近 11,00,000 行。因此加载网页需要很多时间。所以我们想要实现数据库缓存技术就像我们网站的 APC 或 memcache。但是在共享域中,我们没有这些设施可用,我们只有 eaccelerator。但是 eaccelerator 不缓存 db 调用,如果我没记错的话。所以考虑到所有这些点,我们想转移到 VPS 并在这种情况。我们需要使用 APC 或 memcache 来减少页面加载时间的数据库缓存技术...请指导 VPS 和两个更好的缓存技术

【问题讨论】:

  • 数据库表中的 11,000,000 行并不自动等于慢速站点或需要缓存。究竟是什么花了这么长时间?您不需要同一页面上的所有 11m 行,是吗?如果您说您的数据库查询越来越慢,您可以通过使用更好的查询和/或在您的表上添加适当的索引来加快查询速度。
  • 我们基本上必须在这里使用like查询。我们也在做分页,首先显示20条记录和2列的计数。我们只使用2个查询......我们怎样才能加快在这种情况下查询先生没有缓存

标签: php mysql caching


【解决方案1】:

我们有类似的网站,我们使用 APC

APC 将缓存操作码以及生成的 html。这有助于避免不必要的页面点击

您还应该在 mysql 上启用缓存以缓存查询结果

【讨论】:

  • 我们也应该选择 APC 是不是和你们一样???而且可以在共享服务器中实现
  • 我不认为你可以在共​​享主机环境中实现它,因为 APC 是作为 PHP 扩展加载的。你可以很容易地在 VPS 上实现它
  • 那么在进行 APC 缓存(如 RAM、CPU 或带宽)之前,我们需要查看 VPS 的主要配置吗??
  • 没什么特别的......我有一个网站在 128 MB 内存上运行良好,APC 设置为使用 64 MB,其余用于 Apache / PHP / MySQL。所以没有这样的固定规则。我建议从 512 MB RAM 开始,并在需要时逐渐增加
【解决方案2】:

我有一项任务需要从具有超过 100.000 条记录的数据库表中获取行。这是一个可滚动的页面。所以我所做的是获取前 50 条记录并在第一次调用中缓存下 50 条记录。在向下滚动事件时,我编写了一个 ajax 请求来检查数据是否在缓存中可用;如果不是,我从数据库中获取它并缓存了接下来的 50 个。它工作得很好,解决了加载时间不方便的问题。

如果您有类似的情况,您可能会从这种方法中受益。

ps:我使用了内存缓存。

【讨论】:

    【解决方案3】:

    根据您的评论,我认为您正在执行 LIKE %..% 查询并希望对结果进行分页。首先,调查 FULLTEXT 索引是否适合您,因为它们应该表现更好。如果这不是一个选项,您可以像这样添加一个简单的缓存:

    1. 将每个唯一的搜索词视为一个 id,即如果您的 URL 中有 ..?search=foobar,那么“foobar”就是结果集的 id。将其保留在所有链接中,例如..?search=foobar&page=2
    2. 如果结果集还不存在(见下文),请创建它:
      1. 使用慢速查询查询数据库。
      2. 将所有结果放入一个数组中。不要过度,您不想存储数百兆字节。
      3. 为每个查询创建一个唯一的文件名,例如sha1($query),或者sha1(strtolower($query))
      4. serialize 数据并将其存储在文件中。
    3. 从文件中获取数据,unserialize 它,显示与请求页面对应的数组部分。
    4. 有时,删除旧的缓存结果。您可以使用if (rand(0, 100) == 1) .. 之类的方法来做到这一点,它平均每 100 个查询运行一次清理作业。在服务器负载和数据新鲜度之间取得平衡。缓存失效是一个可以写整本书的主题,顺便说一句。

    这是一个简单的穷人缓存实现。这不是很好,但如果您完全没有其他工作可做,那比一遍又一遍地运行缓慢的查询要好。

    【讨论】:

    • 我在表中进行搜索的列,我已将该表指定为 FULLTEXT,但是当我运行全文时,即匹配查询代替类似查询时,我没有得到任何结果。我没有能得到,为什么会这样..如果你能纠正我的全文查询问题,我想我的页面加载时间会减少。
    【解决方案4】:

    APC 是替代 PHP 缓存,仅适用于 PHP。而 Memcahced 可以独立使用任何语言。

    【讨论】:

    • 所以对于我来说,我应该在 VPS 中选择 APC 吗???或者是否有任何其他缓存技术可以在共享主机中实现
    • 在你的情况下,我会建议去 Memcached。
    • 但是我们只在寻找 PHP。那为什么我们应该去 memcache。我可以强调这一点
    • 如果您只寻找 PHP 解决方案,APC 非常好。但 Memcached 也可以与 PHP 一起使用。如果您需要,我可以推荐一些我已经完成的代码(Memcached)。
    • 你确定先生。如果你分享一些链接,这将是一个很大的帮助
    猜你喜欢
    • 2019-07-19
    • 1970-01-01
    • 1970-01-01
    • 2011-08-20
    • 2011-01-17
    • 2011-03-26
    • 2010-10-07
    • 2013-10-16
    • 2010-09-12
    相关资源
    最近更新 更多