2012-10-30 36 views
0

假設我們有一個應用程序向用戶呈現連續數據。例如。博客 - 我們介紹博客條目的列表,並將此列表分爲多個頁面 - 所以我們以/ page1// page2結尾。用PHP/MySQL緩存已排序數據的最佳方法

第一頁顯然是最常訪問的頁面,但頁數越少越不經常它被要求。

如果我們實現我們的應用程序緩存,我們有兩個選擇:

每一個新進入

  • 當一個頁面被請求PHP正在尋找緩存版本後,每一頁的

    • 更新緩存;如果存在則返回,否則緩存與到期日期設置爲創建,比方說,一個小時

    首先解決辦法似乎像一個非常浪費資源的給我。第二個產生危險場景的可能性:

    如果用戶請求頁面x然後(x + 1),頁面x被緩存且頁面(x + 1)不是?如果頁面x的緩存過時,則頁面(x + 1)上的用戶將看到相同的內容。或者更糟糕的是,如果用戶從x頁面轉到(x-1)頁面,該怎麼辦?他會錯過一些條目!

    如何實現緩存以避免此問題?

  • +0

    最好的「關鍵」是使用查詢並創建SQL的哈希,然後您可以保持約定。或者您的案例中的網址 – wesside

    回答

    0

    通常情況下,最好是按需緩存,不要急於緩存,除非您確信在那裏完成的工作不會被浪費。

    通常情況下,您使用像Memcached一樣的後備存儲來保存您的瞬態數據。這可以配置一個「生存時間」(TTL)這將自動過期的東西變得陳舊或沒有被使用過。

    通常你會將一大塊頁面緩存到一個字符串中,然後使用某種標識鍵保存該字符串。在你的情況下,頁面URL或參數的一些子集可能充當唯一。請記住,如果用戶會話對本節的內容有影響,那麼與此相關的內容也必須成爲緩存鍵的一部分,例如user_id

    相關問題