Laravel缓存用户相关的缓存

时间:2016-01-20 07:29:33

标签: mysql laravel caching laravel-5.1

让我们说我有一个系统,我有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或类似的东西上使用,以便同步数据库。不知道同步是如何工作的。

与往常一样,任何帮助都表示赞赏。

1 个答案:

答案 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