Symfony FOSUserBundle-redis中的用户实体
我正在做一个基于symfony2的项目,对于用户管理,我使用FOSUserBundle。一切正常,但我发现了一个不便之处。当用户登录FOSUserBundle时,运行SELECT查询从数据库中获取用户实体。对于大量的用户,这是很多查询,我希望避免。因为我在我的项目中也使用Redis,所以我希望在请求之间将用户实体存储在Redis中。在FOSUserBundle中也有可能吗?我认为一个好的替代方案是将用户实体存储在会话中,并将会话放在Redis中,但我仍然必须做一些事情来避免在每次请求时进行SELECT查询。有什么建议吗?您可以随时缓存条令查询 或者,如果您想更改检索和存储用户的方式,您可以随时覆盖其用户提供程序。这可能是首选的方式 例如:Symfony FOSUserBundle-redis中的用户实体,symfony,redis,fosuserbundle,Symfony,Redis,Fosuserbundle,我正在做一个基于symfony2的项目,对于用户管理,我使用FOSUserBundle。一切正常,但我发现了一个不便之处。当用户登录FOSUserBundle时,运行SELECT查询从数据库中获取用户实体。对于大量的用户,这是很多查询,我希望避免。因为我在我的项目中也使用Redis,所以我希望在请求之间将用户实体存储在Redis中。在FOSUserBundle中也有可能吗?我认为一个好的替代方案是将用户实体存储在会话中,并将会话放在Redis中,但我仍然必须做一些事情来避免在每次请求时进行SEL
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的一部分,您可以检查它是否容易执行,只需打开调试器并在其上设置断点:)