2017-02-10 76 views
0

如何獲取CodeIgniter頁面緩存以將輸入記入帳戶?例如,假設我有一個分頁系統。啓用緩存後,如果我轉到第1頁,然後第2頁(相同控制器)... CI緩存將返回第1頁的內容。Codeigniter頁面緩存不考慮輸入?

function my_controller() { 
     $this->output->cache(1); 

     $page = $this->input->post("page"); 
     $data = getData($page); 

     $this->load->view('my_view', $data); 
    } 

在上例中,您無法正確地平移頁面。即使發佈的輸入發生更改,它也會繼續加載緩存的頁面。

如何才能讓緩存系統將$ _POST數據考慮在內,並將這些數據視爲來自緩存的不同請求?

回答

0

緩存,其視圖必須緩存類中沒有明顯的變化會導致混亂動態內容...

最簡單的辦法是不要緩存動態頁面,它算不上什麼緩存是,無論如何,緩存意味着(至少,主要是)靜態數據。

你可以做到這一點(取決於結果集)的另一種方式是使用javascript和paginate客戶端,並使用ajax調用來從服務器獲取數據,客戶端永遠不會離開單個視圖,只有初始視圖會被緩存。

內容的更新頻率如何?我們是否像一分一秒地發生變化的訂單列表一樣,或者是每月變化的產品列表?

如果通過ajax加載,那麼只要確保你所調用的內容不會暴露給你的緩存(除非內容很少改變)......因爲它會從不同的方法調用,所以這並不難確保,頁面加載時,您應該每次都調用第一個xx數量的結果,但在其餘視圖中使用緩存的好處。

+0

內容只會每隔幾天更改一次,但被稱爲A LOT。這就是爲什麼我正在尋找一種方法來防止持續的處理/數據庫調用。我基本上很想設置一個失效期(比如說3天),並且在任何時候控制器被相同的輸入命中時,它會返回緩存文件,而不是再次完成所有工作。 – VDH

+0

您是否遇到了減慢數據庫服務器的問題?請記住,數據庫服務器執行計劃等,因此他們往往保留自己的緩存這些硬命中查詢。如果你沒有遇到問題,那根本就不值得。特別是如果您的查詢不是標量滿的,則獲取數據是數據庫的用途 –

+0

您使用的是哪種數據庫技術? MySQL,PostgreSQL,SQL Server? –