【问题标题】:Laravel database cacheLaravel 数据库缓存
【发布时间】:2026-02-16 07:40:01
【问题描述】:

我正在开发一个电子商务网站,在该网站的每个页面中,都有包含购物车信息的标头,因此每次加载带有此标头且包含购物车的页面时,数据库都会被命中。我想知道是否可以使用数据库缓存技术来减少查询时间?就像没有任何变化一样,除非新产品被添加到购物车中,否则不要从数据库中获取数据?

【问题讨论】:

    标签: mysql database caching laravel


    【解决方案1】:

    当然可以,但这听起来是个坏主意,我不鼓励这样做,因为缓存与整个应用程序共享,而购物车信息与单个用户相关。对于这种用户特定的信息,最好利用 cookie 或会话。

    不管怎样,你有。您没有提供任何代码示例,所以我编造了一些通用的东西。诀窍是向缓存键添加一些内容,使其对每个用户都是唯一的(例如模型主键),然后在购物车中添加/删除产品后,使用之前的缓存键清除缓存。

    // Code to get current user shopping cart (The one that will be shown in your header)
    $cart = Cart::where('user_id', $user_id = Auth::user()->getKey())->remember(60*2, "cartOfUser$user_id")->get();
    
    // Code that adds a product to the cart
    Cart:addProduct($product, $qty) and Cache::forget('cartOfUser' . Auth::user()->getKey());
    

    我的建议是现在不要过度优化。我确信购物车数据库查询没什么大不了的。完成您的应用程序,完善它,当一切都按预期运行时,运行分析器来定位瓶颈,然后进行优化。

    【讨论】:

    • 是的,重点是,我同意为这么多不同的用户缓存数据库查询是个坏主意。