【问题标题】:FOSUserBundle - user entity in redisFOSUserBundle - redis 中的用户实体
【发布时间】:2013-09-26 08:10:03
【问题描述】:

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

【问题讨论】:

    标签: symfony redis fosuserbundle


    【解决方案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;
        }
    }
    

    【讨论】:

    • 听起来不错,但您确定 findUser 是在每个请求时触发的方法吗?如果是,那么我有我的解决方案:)。
    • 是的,因为它是从 loadUserByUsername 方法调用的,它是 Symfony UserProviderInterface 的一部分
    • 你可以检查它是否容易,只需打开调试器并在它处设置断点:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-20
    • 2013-01-06
    相关资源
    最近更新 更多