Laravel购物车缓存非常慢

时间:2018-07-15 20:37:19

标签: php laravel caching

我正在使用缓存来存储我们的购物车。随着添加更多的购物车,获取单个购物车时系统变得非常慢。

我使用下面的代码访问一个购物车,感觉可能是缓存中的一个键下存储了很多信息。

function discount_when_role_and_payment(/* magic */) {
global $woocommerce;
if ( /* credit-card selected */ && current_user_can('subscriber') ) {
    /* get woocommerce cart totals, apply 2% discount and return*/
} 
return /*cart totals after discount*/;
}

add_filter( '/* magic */', 'discount_when_role_and_payment' );

我了解我们可以使用诸如 carts:uniqueId 之类的唯一键,但是我需要能够访问所有购物车并遍历它们,因此我认为此解决方案无效。

对于如何解决此问题的任何建议,我将不胜感激。

编辑: 根据 ka_lin 的评论,我需要遍历购物车和预订,以便检查预订日期是否仍然可用。如果不再可用,则需要清除选择的日期,并发出事件以提醒用户。

我希望将数据保留在服务器端,因为它是在api之后构建的,以便更轻松地与合作伙伴集成。

4 个答案:

答案 0 :(得分:0)

如果出于某种原因需要将购物车保存在服务器上,则可以始终使用数据库。

如果要存储它们是因为用户在离开页面时不会丢失物品,我建议您使用javascript并将其与localStorage一起存储。

编辑: 听起来您正在使用缓存来处理应该由数据库处理的内容。

答案 1 :(得分:0)

幕后发生的事情是:Laravel中的购物车(如果您已用作基于会话的购物车)被存储在文件系统和Cache中,而未安装memcache / apc缓存。 Laravel也使用默认缓存作为文件系统。所以最终您会做同样的事情。

我个人并不认为仅在网站的许多地方使用购物车会使整个网站变慢。网站的其他因素一定会使您的网站变慢。

答案 2 :(得分:0)

为解决该问题,我创建了一个名为CacheKeys的表,在其中保存了唯一的购物车ID,然后可以使用它们循环浏览并获取所有购物车/预订。

答案 3 :(得分:0)

您解决问题的心态是正确的。但是,实施带来很多麻烦。

输入:Lada cache package

在这样的系统中,真正慢的是命中数据库的大量SQL查询。 Lada缓存可通过自动将查询结果保存在Redis中并使更新后的查询结果无效来提供帮助。

我们已经看到在生产环境中查询从2s下降到0.5s,有效增长了4倍。

RTFM:仔细阅读手册 ,尤其是Finally, all your models must include the Spiritix\LadaCache\Database\LadaCacheTrait trait部分,并享受无忧的缓存系统。

注意:您的后端应该是处理数据库查询的唯一系统。