2016-10-20 101 views
1

我有一些關於緩存的問題。一些前提條件第一:TYPO3 Extbase存儲庫查詢緩存

// query 1 
$data1 = $this->myRepository->findByPid($myPid); 
// query 2 
$data2 = $this->myRepository->findOneByUid($myUid); 

我的問題:

  1. 如果我在腳本執行查詢2幾次,第一次調用從數據庫檢索數據,其他所有從緩存中,沒有查詢數據庫?
  2. 如果稍後再次執行查詢2(例如,在第二個腳本中),則會從數據庫中再次檢索數據(除了使用緩存框架來存儲此查詢的結果外,沒有持久查詢緩存)?
  3. 如果我執行查詢1然後查詢2並且查詢1包含uid「$ myUid」的數據,那麼查詢2的數據是從緩存中檢索的?
+0

您可以檢查我的回答不同的問題,但同樣的邏輯: http://stackoverflow.com/a/40126426/2070270 –

回答

3

對於較舊和較新的Typo3版本,行爲是不同的。從Typo3 7.x開始,如果您使用默認存儲庫查詢,緩存始終處於使用狀態。從數據庫中檢索數據集後,它將通過屬性映射器映射到域對象,並且如果該對象已存在於緩存中,則返回它。

TYPO3的6.x中,你會得到相同的UID兩個不同的對象,如果你有->findByUid選擇它,然後例如作爲控制器參數

+0

所以你的答案是,當使用TYPO3 7:1.是的?問題2和3沒有回答。 – Sven

+1

#3 - 是的 #2 - 你是什麼意思我的第二個腳本?如果它是新的頁面請求,則不使用持久性緩存,只使用頁面緩存(如果您的操作是可緩存的,則使用默認的typo3緩存)。如果您的意思是訪問同一個存儲庫的第二個插件,則會使用緩存 –