【问题标题】:Laravel caching large number of queriesLaravel 缓存大量查询
【发布时间】:2016-07-11 23:47:59
【问题描述】:

我有一个电子商务网站,其中包含多达 100 万种产品,并且该网站分布在许多地区。每个产品页面都有大约 10-15 个对数据库的查询,例如通过 url 获取产品、获取产品类别和获取产品格式等。目前我使用基于 laravel 文件的缓存并且我没有在产品页面上缓存任何内容。

问题是产品页面也是各种爬虫/机器人的目标,这意味着对数据库进行大量查询。此外,如果我将产品页面缓存 1 小时,则在该时间段内不太可能受到攻击,因为这些机器人针对所有页面。此外,由于我有不同的区域(不同的域),这意味着页数是由区域数 (5-10) 来计时的。

所以我不知道如何缓存它。我想过永远缓存所有这些查询(没有时间限制),并在产品发生变化时更改缓存。这是要走的路吗? laravel 是否为每个正在缓存的查询创建一个缓存文件?如果是,那么文件数量可能会成为问题。

我也考虑过使用redis。但是我认为缓存那么多键时内存会用完吗?知道我应该如何缓存这个吗?提前致谢。

编辑1:

考虑使用 redis 进行 html 缓存。这样我就可以缓存例如产品价格及其 html。知道我需要缓存多少内存,比如说 10-2000 万个键,其中一些 html 作为它们的值?

【问题讨论】:

  • 可以使用redis。

标签: php mysql laravel caching


【解决方案1】:

有一个缓存查询的 laravel 包。

https://github.com/dwightwatson/rememberable

User::first()->remember(1440)->posts()->get();

【讨论】:

    【解决方案2】:

    一些缓存思路:

    如果人们没有登录,nginx 会缓存整个 HTML 页面。

    再获得 4 个 VPS,并且在每个 VPS 上只放置 memcache 并将所有查询都放在 memcache 上。继续添加更多服务器,直到您有足够的内存来缓存所有查询。

    再获得 4 个 VPS 并在每个 VPS 上放置 mysql,并使用所有可用内存进行查询缓存。使用分片(不是主从)将某些产品的请求路由到某些机器。继续添加机器,直到所有数据都保存在查询缓存中

    重写系统,使其不需要缓存即可以可接受的速度运行。缓存用于提高吞吐量而不是提高速度时效果最佳。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-11-30
      • 2018-06-27
      • 1970-01-01
      • 1970-01-01
      • 2019-05-12
      • 1970-01-01
      • 2016-09-03
      相关资源
      最近更新 更多