我的电子商务网站拥有多达100万种产品,该网站位于许多地区。每个产品页面都有大约10-15个查询到数据库,比如通过网址获取产品,获取产品类别和获得产品格式等等。使用laravel基于文件的缓存并且我不在产品页面上缓存任何内容。
问题是产品页面也是各种抓取工具/漫游器的目标,这意味着对DB进行了大量查询。此外,如果我缓存一个产品页面说1小时,那不可能在那个时间段内被击中,因为那些机器人针对所有页面。此外,因为我有不同的区域(不同的域),意味着页面的数量按区域计数(5-10)计时。
所以我没有想法如何缓存这个。我想到永远缓存所有这些查询(没有时间限制)并在产品更改时更改缓存。这是要走的路吗? laravel是否为每个正在缓存的查询创建缓存文件?如果是,则文件数可能会成为问题。
我还想过使用redis。但是我认为在缓存那么多密钥时我会耗尽内存?知道我应该如何缓存这个?提前谢谢。
考虑使用redis进行html缓存。所以我会缓存例如产品价格及其html。任何想法我需要缓存多少内存让我们说1000万到20万个密钥,其中有一些html是值?
答案 0 :(得分:0)
有一个laravel包可以缓存查询。
https://github.com/dwightwatson/rememberable
User::first()->remember(1440)->posts()->get();
答案 1 :(得分:0)
一些缓存提示:
如果人们没有登录,nginx会缓存整个HTML页面。
获得4个额外的VPS,并且每个都只放入memcache并记忆所有查询。继续添加更多服务器,直到有足够的内存来缓存所有查询。
获得4个VPS并在每个上放置mysql并使用所有可用内存进行查询缓存。使用分片(非主从)将某些产品的请求路由到某些机器。继续添加机器,直到查询缓存中保存所有数据
重写系统,以便它不需要缓存以可接受的速度运行。当缓存用于更高的吞吐量而不是用于提高速度时,缓存效果最佳。