让我们说我有一个系统,我有3个模型制造商,车辆和品牌。
Vehicles -> One to one -> brand / manufacturer
Manufacturer -> One to many -> brand / vehicles
Brand -> One to many -> Vehicles
Brand -> One to One -> Manufacturer
系统有一个管理面板和一个用户面板。
管理员面板:
在管理面板中,我通常会做这样的事情
Vehicle::with('manufacturer', 'brand')->get();
我也没有缓存这个查询,我认为它很好,因为我在管理区域不需要太多的速度。
用户区:
但是在用户区域,我使用了更简单的查询,因为我已经阅读过更简单的查询,因为它们可以被缓存。因此,我使用一个查询来获取车辆的制造商,并使用另一个查询来获得车辆的品牌。然后我只准备一个数组发送到视图。这是一个示例查询
Manufacturer::where('vehicle_id', $vehicleID)->where('is_active', 1)->get($columns);
每个用户都会有不同的车辆。假设用户A 有10辆车,用户B 有20辆车。
所以我的问题是如何缓存用户特定的查询,这些查询会不断变化?
其次有没有任何可靠但自动化的方法来代替更改代码,比如memcache或类似代码?
我也听说过redis缓存,我认为它从mysql中获取所有数据然后存储在redis中,下次它只是从redis而不是mysql中获取它。这是否更好?我可以在不改变代码的情况下这样做吗?
注意:还要记住的另一件事是该系统必须是可自动扩展的,即在aws beanstalk或类似的东西上使用,以便同步数据库。不知道同步是如何工作的。
与往常一样,任何帮助都表示赞赏。
答案 0 :(得分:2)
代码示例。
$result = {your result}
if (!Cache::has('user' . $userID) || env('CACHE_TIME') < 0) {
Cache::put('user' . $userID, $result, env('CACHE_TIME'));
} else {
$result = Cache::get('user' . $userID);
}
.env文件
CACHE_TIME = 240 // cache time minutes, you can disable cache with -1
CACHE_DRIVER=file
用户购车后
Cache::forget('user' . $userID);
注意:您可以更改缓存方法。有关详情,请访问https://laravel.com/docs/5.1/cache