我有一个电子商务网站,其中有多达100万种产品,该网站是在许多地区。每个产品页面有大约10-15个查询到数据库,像通过url获取产品,获取产品类别和获取产品格式等。目前im使用的是基于laravel文件的缓存,而不是产品页面上的缓存。
问题是产品页面也是各种爬虫/机器人的目标,这意味着对数据库的大量查询。此外,如果我缓存一个产品页面,比方说1小时,它不太可能在这段时间内被击中,因为这些机器人的目标是所有的页面。另外,因为我有不同的区域(不同的域),这意味着页面的数量是由区域计数(5-10)计时的。
所以我不知道如何缓存它。我想过永远缓存所有这些查询(没有时间限制),并在产品发生变化时更改缓存。这是要走的路吗?laravel会为每个被缓存的查询创建一个缓存文件吗?如果是,那么文件数量可能会成为一个问题。
我也考虑过使用redis。但是我想我会在缓存那么多键的时候耗尽内存?你知道我该如何缓存它吗?提前谢谢。
Edit1:
我想过用redis进行html缓存。这样我就可以缓存例如产品价格及其html。任何ides,我需要缓存多少内存,比方说1000万到2000万个键值为html?
发布于 2016-03-24 19:52:42
有一个用于缓存查询的laravel包。
https://github.com/dwightwatson/rememberable
User::first()->remember(1440)->posts()->get();发布于 2016-03-24 21:23:37
一些缓存的想法:
如果用户没有登录,nginx会缓存整个HTML页面。
再获得4个VPS,只在每个VPS上放入memcache,并对所有查询进行memcache。继续添加更多的服务器,直到您有足够的内存来缓存所有查询。
再获取4个VPS,并在每个VPS上放置mysql,并使用所有可用内存进行查询缓存。使用分片(而不是主从)将对某些产品的请求路由到某些机器。继续添加计算机,直到所有数据都保存在查询缓存中
重写系统,这样它就不需要缓存就能以可接受的速度运行。当缓存用于更大的吞吐量时效果最好,而不是提高速度。
https://stackoverflow.com/questions/36199308
复制相似问题