Laravel缓存大量查询


Laravel caching large number of queries

我有一个电子商务网站,它有多达100万种产品,该网站分布在许多地区。每个产品页面都有大约10-15个DB查询,比如通过url获取产品、获取产品类别和获取产品格式等。我现在使用基于laravel文件的缓存,而我不在产品页面上缓存任何内容。

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

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

我还考虑过使用redis。但我想缓存那么多密钥时会耗尽内存吗?知道我应该如何缓存这个吗?提前谢谢。

第1版:

考虑使用redis进行html缓存。这样我就可以缓存例如产品价格和它的html。我需要多少内存来缓存,比如说10-2000万个以html为值的密钥?

有一个用于缓存查询的laravel包。

https://github.com/dwightwatson/rememberable

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

一些缓存想法:

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

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

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

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