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或类似的应用程序,因此数据库应该同步。不知道同步如何工作。
一如既往,任何帮助表示赞赏。
代码示例。
$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
我真的很喜欢这个想法,它的简单但非常强大。我唯一担心的是,如果我使用基于文件的缓存驱动程序,它将如何对自动缩放做出反应(可能有3个克隆服务器运行相同的脚本)? –
我无法尝试redis与laravel,但我认为你可以使用通过缩放问题。 –
将调查。谢谢,Gorkem –
您是否试图缓存结果。 Cache :: put('user')。$ userID,$ result,env('CACHE_TIME')); –
不,我没有,因为我不知道我应该使用哪个缓存系统。其次,数据在不断变化。假设有人在接下来的30秒内购买一辆车,你如何处理这样的事情? –
我会为你做一个答案。 –