我有至少有一個相關實體的記錄列表。在記錄列表中,我顯示相關記錄的主要列表和數據,所以如果表具有〜100條記錄,則原則會生成並執行〜150個查詢:一個用於列表,另一個用於每個相關實體,這不是一件好事。它可以輕鬆簡化爲只有2個查詢:一個用於列表,另一個用於所有相關實體。已啓用Symfony 2二級緩存但未使用?
正如我所發現的,教義中的二級緩存對於這種情況來說是完美的。
所以,我已經啓用緩存配置:
doctrine:
orm:
second_level_cache:
enabled: true
,並添加到所有實體註釋@ORM\Cache(usage="READ_ONLY")
。然後生成列表我之前獲取的所有記錄形成兩個表:
$this->getDoctrine()->getRepository('AppBundle:Refuel')->findAll();
$this->getDoctrine()->getRepository('AppBundle:FuelType')->findAll();
正如我希望他們會得到緩存和durign實際列表,而不會產生〜150個查詢渲染重用。但事實並非如此。調試面板顯示,仍然有〜150執行查詢和緩存統計信息:
Hits: 0
Misses: 2
Puts: 319
所以我猜實體正在被緩存但不能重用。爲什麼?
我發現的關於二級緩存的所有內容都與redis有關 - 不想使用它 - 需要redis來使用該緩存嗎?
很遺憾,關於如何配置該文檔的文檔太少了。
你必須先定義一個高速緩存驅動器,可以使用Redis/Memecached。 – BDS
聽起來像你應該爲這個關係設置急切的加載(而不是延遲加載),或者創建一個存儲庫方法來使用'join'一次獲取整個數據。然後如果仍然需要實現緩存。 –
Yep Jakub是對的,這是更好的做法。緩存只是針對設計不當的查詢的補丁。 –