Laravel缓存用户相关缓存

问题描述:

可以说我有一个系统,我有3个模型制造商,车辆和品牌。Laravel缓存用户相关缓存

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

您是否试图缓存结果。 Cache :: put('user')。$ userID,$ result,env('CACHE_TIME')); –

+0

不,我没有,因为我不知道我应该使用哪个缓存系统。其次,数据在不断变化。假设有人在接下来的30秒内购买一辆车,你如何处理这样的事情? –

+0

我会为你做一个答案。 –

代码示例。

$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

+0

我真的很喜欢这个想法,它的简单但非常强大。我唯一担心的是,如果我使用基于文件的缓存驱动程序,它将如何对自动缩放做出反应(可能有3个克隆服务器运行相同的脚本)? –

+0

我无法尝试redis与laravel,但我认为你可以使用通过缩放问题。 –

+1

将调查。谢谢,Gorkem –