Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Symfony FOSUserBundle-redis中的用户实体_Symfony_Redis_Fosuserbundle - Fatal编程技术网

Symfony FOSUserBundle-redis中的用户实体

Symfony FOSUserBundle-redis中的用户实体,symfony,redis,fosuserbundle,Symfony,Redis,Fosuserbundle,我正在做一个基于symfony2的项目,对于用户管理,我使用FOSUserBundle。一切正常,但我发现了一个不便之处。当用户登录FOSUserBundle时,运行SELECT查询从数据库中获取用户实体。对于大量的用户,这是很多查询,我希望避免。因为我在我的项目中也使用Redis,所以我希望在请求之间将用户实体存储在Redis中。在FOSUserBundle中也有可能吗?我认为一个好的替代方案是将用户实体存储在会话中,并将会话放在Redis中,但我仍然必须做一些事情来避免在每次请求时进行SEL

我正在做一个基于symfony2的项目,对于用户管理,我使用FOSUserBundle。一切正常,但我发现了一个不便之处。当用户登录FOSUserBundle时,运行SELECT查询从数据库中获取用户实体。对于大量的用户,这是很多查询,我希望避免。因为我在我的项目中也使用Redis,所以我希望在请求之间将用户实体存储在Redis中。在FOSUserBundle中也有可能吗?我认为一个好的替代方案是将用户实体存储在会话中,并将会话放在Redis中,但我仍然必须做一些事情来避免在每次请求时进行SELECT查询。有什么建议吗?

您可以随时缓存条令查询

或者,如果您想更改检索和存储用户的方式,您可以随时覆盖其用户提供程序。这可能是首选的方式

例如:

class MyFOSUserProvider extends FOS\UserBundle\Security\UserProvider
{
    protected function findUser($username)
    {
        // If user is cached in session or wherever
        // Return it here

        // If it isn't, fetch it
        $user = $this->userManager->findUserByUsername($username);

        // Store it in your cache

        // Return it
        return $user;
    }
}

听起来不错,但您确定findUser是一种在每次请求时都会触发的方法吗?如果是,那么我就有了我的解决方案:).Yep,因为它是从Symfony的
loadUserByUsername
方法调用的,它是Symfony的一部分,您可以检查它是否容易执行,只需打开调试器并在其上设置断点:)