Laravel缓存了大量查询

时间:2016-03-24 11:39:38

标签: php mysql laravel caching

我的电子商务网站拥有多达100万种产品,该网站位于许多地区。每个产品页面都有大约10-15个查询到数据库,比如通过网址获取产品,获取产品类别和获得产品格式等等。使用laravel基于文件的缓存并且我不在产品页面上缓存任何内容。

问题是产品页面也是各种抓取工具/漫游器的目标,这意味着对DB进行了大量查询。此外,如果我缓存一个产品页面说1小时,那不可能在那个时间段内被击中,因为那些机器人针对所有页面。此外,因为我有不同的区域(不同的域),意味着页面的数量按区域计数(5-10)计时。

所以我没有想法如何缓存这个。我想到永远缓存所有这些查询(没有时间限制)并在产品更改时更改缓存。这是要走的路吗? laravel是否为每个正在缓存的查询创建缓存文件?如果是,则文件数可能会成为问题。

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

EDIT1:

考虑使用redis进行html缓存。所以我会缓存例如产品价格及其html。任何想法我需要缓存多少内存让我们说1000万到20万个密钥,其中有一些html是值?

2 个答案:

答案 0 :(得分:0)

有一个laravel包可以缓存查询。

https://github.com/dwightwatson/rememberable

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

答案 1 :(得分:0)

一些缓存提示:

如果人们没有登录,

nginx会缓存整个HTML页面。

获得4个额外的VPS,并且每个都只放入memcache并记忆所有查询。继续添加更多服务器,直到有足够的内存来缓存所有查询。

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

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