2013-09-26 31 views
2

我正在開發基於symfony2和用戶管理的項目,我使用FOSUserBundle。一切正常,但我發現一個不便。用戶登錄時FOSUserBundle運行SELECT查詢以從數據庫獲取用戶實體。有了大量的用戶,這是很多的疑問,我想避免。因爲我也在我的項目中使用Redis,所以我想在請求之間用redis存儲用戶實體。在FOSUserBundle中甚至有可能嗎?我認爲一個很好的選擇是在會話中存儲用戶實體,並將會話放在Redis中,但仍然需要做一些事情來避免每次請求的SELECT查詢。有什麼建議麼?FOSUserBundle - redis中的用戶實體

回答

1

您可以隨時緩存原則查詢。

或者,如果您想要更改檢索和存儲用戶的方式,則可以始終覆蓋他們的用戶提供商。這可能是首選的方式。

例如:

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; 
    } 
} 
+0

聽起來不錯,但你肯定findUser是在每一個請求發射的方法?如果是的話,那麼我有我的解決方案:)。 –

+0

是的,因爲它是從'loadUserByUsername'方法調用的,它是Symfony [UserProviderInterface](http://api.symfony.com/2.3/Symfony/Component/Security/Core/User/UserProviderInterface.html)的一部分。 –

+0

您可以檢查它是否容易,只需打開調試器並在其中設置斷點:) –

相關問題