【发布时间】:2026-02-16 07:40:01
【问题描述】:
我正在开发一个电子商务网站,在该网站的每个页面中,都有包含购物车信息的标头,因此每次加载带有此标头且包含购物车的页面时,数据库都会被命中。我想知道是否可以使用数据库缓存技术来减少查询时间?就像没有任何变化一样,除非新产品被添加到购物车中,否则不要从数据库中获取数据?
【问题讨论】:
标签: mysql database caching laravel
我正在开发一个电子商务网站,在该网站的每个页面中,都有包含购物车信息的标头,因此每次加载带有此标头且包含购物车的页面时,数据库都会被命中。我想知道是否可以使用数据库缓存技术来减少查询时间?就像没有任何变化一样,除非新产品被添加到购物车中,否则不要从数据库中获取数据?
【问题讨论】:
标签: mysql database caching laravel
当然可以,但这听起来是个坏主意,我不鼓励这样做,因为缓存与整个应用程序共享,而购物车信息与单个用户相关。对于这种用户特定的信息,最好利用 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());
我的建议是现在不要过度优化。我确信购物车数据库查询没什么大不了的。完成您的应用程序,完善它,当一切都按预期运行时,运行分析器来定位瓶颈,然后进行优化。
【讨论】: