我正在开发一个电子商务网站,在该网站的每个页面中,都有一个包含购物车信息的 header ,因此每次加载包含此 header 且其中包含购物车的页面时,数据库都会被命中。我想知道是否可以使用数据库缓存技术来减少查询时间?就像如果没有任何变化,那么除非将新产品添加到购物车中,否则不要从数据库中获取数据?
最佳答案
当然可以,但这听起来是一个坏主意,我不鼓励它,因为缓存与整个应用程序共享,而购物车信息与单个用户相关。对于此类用户特定信息,最好利用 cookie 或 session 。
无论如何,给你了。您没有提供任何代码示例,因此我编写了一些通用的代码。诀窍是向缓存键添加一些使其对每个用户而言都是唯一的内容(例如模型主键),并在向购物车添加/删除产品后,使用之前的缓存键清除缓存。
// 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());
我的建议是现在不要过度优化。我确信购物车数据库查询不是什么大问题。完成您的应用程序,对其进行完善,当一切按预期运行时,运行分析器来定位瓶颈,然后进行优化。
关于mysql - Laravel 数据库缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26908594/