[英]Laravel cart cache very slow
我正在使用缓存来存储我们的购物车。 随着添加更多的购物车,在获取单个购物车时,系统变得极其缓慢。
我使用以下代码访问单个购物车,并认为可能是缓存中的一个键下存储了许多信息。
$carts = Cache::get("carts");
$cart = $carts[$this->reference];
我知道我们可以使用诸如carts:uniqueId之类的唯一键,但是我需要能够访问所有购物车并遍历它们,因此我认为此解决方案无效。
对于如何解决此问题的任何建议,我将不胜感激。
编辑:根据ka_lin的评论,我需要遍历购物车和预订,以便可以检查预订日期是否仍然可用。 如果不再可用,则需要清除选择的日期,并发出事件以提醒用户。
我希望将数据保留在服务器端,因为它是在api之后构建的,以便更轻松地与合作伙伴集成。
如果出于某种原因需要将购物车保存在服务器上,则可以始终使用数据库。
如果要存储它们是因为用户离开页面时不会丢失任何物品,我建议您使用javascript并将其与localStorage一起存储。
编辑:听起来您正在使用缓存来处理应该由数据库处理的内容。
幕后发生的事情是:Laravel中的购物车(如果您曾经用作基于会话的购物车)被存储在文件系统和Cache中,而未安装memcache / apc缓存。 Laravel也使用默认缓存作为文件系统。 所以最终您会做同样的事情。
我个人不认为仅在网站的许多地方使用购物车会减慢整个网站的速度。 网站的其他因素一定会使您的网站变慢。
为了解决该问题,我创建了一个名为CacheKeys的表,在其中保存了唯一的购物车ID,然后可以使用它们循环浏览并获取所有购物车/预订。
解决问题所采用的心态是正确的。 然而,实施带来很多痛苦。
输入: Lada缓存程序包
在这样的系统中,真正慢的是冲击数据库的大量SQL查询。 Lada缓存可通过自动将查询结果保存在Redis中并使更新后的查询结果无效来提供帮助。
我们已经看到在生产环境中查询从2s下降到0.5s,有效增长了4倍。
RTFM:尤其要仔细阅读手册。 Finally, all your models must include the Spiritix\\LadaCache\\Database\\LadaCacheTrait trait
部分,并享受无忧的缓存系统。
注意:您的后端应该是处理数据库查询的唯一系统。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.