Laravel用户特定的缓存

时间:2017-12-30 19:36:56

标签: php laravel caching

我从来没有做过很多关于缓存的事情,但我现在正试着玩一下它。我有一个返回大量数据的仪表板,为了使负载更轻,我正在缓存数据:

return cache()->rememberForever('something', function () {
    return auth()->user()->something()->get();
});

“某事”只是一个相关的模型。创建新记录时,在控制器storeupdate方法中,我只需执行此操作:

cache()->forget('something');

这一切都完美无瑕。但是当我与另一个用户登录时,前一个用户的所有缓存数据显然都显示在仪表板上。

是否有一种简单的方法可以简单地为每个用户缓存数据?

2 个答案:

答案 0 :(得分:4)

你可以这样做,分别为每个用户存储用户对象:

return cache()->rememberForever('something' . auth()->id(), function () {
    return auth()->user()->something()->get();
});

获取经过身份验证的用户的数据:

 cache('something' . auth()->id());

答案 1 :(得分:1)

每个用户的缓存并不一定有意义,我可以想到我的头脑(不是说没有奇怪的用例)。缓存的目的不是为给定用户提供“会话” - 存储,而是为所有用户减轻整个应用程序的负载。

我首先会问为什么你需要为每个用户缓存。对于Laravel Caching如何工作,或者应用程序架构设计不当,或许存在一个根本的误解?我的建议是缓存除用户相关信息之外的所有内容。

有几个包可以帮助解决这个问题,我创建了一个可以解决我自己的问题:https://github.com/GeneaLabs/laravel-model-caching。此包旨在抽象缓存并自动缓存数据库交互(用户信息除外)。这会考虑所有WHERE子句条件,因此对于不同的WHERE子句,每个查询都将以不同方式缓存。这意味着只会为正确的用户返回您的用户敏感数据(可能是用户ID或其他标识符将在WHERE子句中)。