2

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

4

1 回答 1

1

您始终可以缓存学说查询。

或者,如果您想更改检索和存储用户的方式,您可以随时覆盖他们的User Provider。这可能是首选方式。

例如:

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;
    }
}
于 2013-09-26T09:13:47.440 回答