mysql - Laravel 数据库缓存

标签 mysql database caching laravel

我正在开发一个电子商务网站,在该网站的每个页面中,都有一个包含购物车信息的 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/

相关文章:

mysql - 索引如何与 MySql 分区表一起使用

php - 如何使用php直接从mysql数据库获取图像并以json格式显示它们。如何做到这一点?

Python:为列和值设置参数 pypyodbc - executemany

php - 缓存 API 数据 Laravel 5.2

.net - 如何让我的简单 .NET LRU 缓存更快?

caching - 处理器如何获取缓存行?

MySQL - Group By 使用不同的值

php - 错误:调用未定义的方法 Illuminate\Database\Query\JoinClause::whereIn()

mysql - 列有多个值用作下一列的标识符

mysql - 在 rake db :migrate 上的多个数据库上运行相同的迁移