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