缓存MySQL结果的Laravel 4应用程序为所有用户提供相同的缓存文件数据,而不是为每个用户单独缓存结果


Laravel 4 app that caches MySQL result is serving same cached file data to all users instead of separate cached result for each user

Laravel 4 app数据库缓存查询到基于文件的现金,但似乎在用户之间共享。

下面的MySQL查询在用户登录到我的系统时加载一些用户权限设置。

当我检查我的/app/storage/cache/文件夹时,它似乎只生成一个文件,而不管其他用户使用该系统。

因为它似乎基本上是为第一个用户的MySQL查询创建一个缓存,然后其他用户最终被服务于第一个用户缓存的结果!

$permissions_query = DB::table('user_link_permissions')
    ->select(DB::raw('user_link_permissions.link_id,
        user_link_permissions.permission,
        intranet_links.entity_key'))
    ->leftJoin('intranet_links', function($leftJoin)
    {
        $leftJoin->on('user_link_permissions.link_id', '=', 'intranet_links.id');
    })
    //->where('user_link_permissions.permission', 1)
    ->where('user_link_permissions.user_id', $user_id)
    ->orderBy('parent', 'asc')
    ->remember(10, 'user_permissions')
    ->get();

->remember(10, 'user_permissions')行是我缓存结果的地方


这听起来像是DB缓存机制的正确默认行为,我只是没有正确地做它吗?

也许我应该做一个cache key与用户ID在它?

这确实是预期的行为。

正如您自己回答的那样,在缓存密钥中使用某种用户令牌。否则缓存机制无法知道你不希望所有用户共享同一个查询。

->remember(10, 'user_permission' . $user_id)