用memcached做實時分頁快取

2021-06-19 02:33:13 字數 1233 閱讀 7536

用memcached做分頁快取,可能很多人會覺得麻煩而不用。因為在增加、修改、刪除的過程中,你不知道會影響到哪些資料,而如果把所有分頁相關的資料快取都刪除並重新生成一遍,實現又很麻煩,甚至不可行,所以乾脆就用mysql直接分頁,簡單方便,但是這樣效能卻也下降了。 本章就講乙個簡單的實現用memcached做分頁快取的方法。

首先假使我們有乙個文章頁需要做分頁顯示,分頁型別有按分類分頁,按最新分頁,按熱點分頁,按自定義方式分頁,等等。這就出現了乙個比較棘手的問題,我們對資料的更新影響到哪些分頁我們是不可知的,不知道需要刪除哪些相關的快取。你可能會想,更新資料時刪除所有型別分頁的快取不就好了。那我問你,有多少種分頁型別,每個型別各有多少頁,key的組成方式各是什麼,如果分頁帶有其他get查詢引數,你怎麼知道get都傳遞了哪些值,不知道這些,你怎麼刪除全部分頁快取。

講到這裡,你可能會覺得有點失望吧,不是嗎,沒想到用memcached做分頁快取原來這麼麻煩。那麼,有沒有簡單的解決方案?答案是肯定的,請相信,我寫這篇文章的目的,就是來告訴你乙個簡單的解決方案來的。說了這麼多,其實我們需要解決的核心問題就只有乙個,我們增加、修改、刪除文章資料時,能夠讓分頁的快取都失效。解決方案也很簡單,我們只需要引入版本號就可以了,在所有受影響的memcached的key中都加入版本號,當我們增加、修改、刪除文章資料時,版本號+1,這樣就等於所有分頁相關的快取都失效了。

實現**如下: 

<?php 

//備註:假使下面函式都已經已經初始化$memcached了 

class article 

return $artdata; 

} public function updatearticle($conditions,$data) 

private function _getarticleversion() 

return $article_version_num; 

} private function _setarticleversion() 

} ?> 

是不是很簡單?也就是比平常的memcached快取多了兩個函式_ getarticleversion()和_ setarticleversion(),這樣當我們有增加、修改、刪除文章的時候,就呼叫_ setarticleversion()函式,使版本號+1,也就是之前版本的資料都失效了,由於在獲得文章分頁快取資料時key都有加入_ getarticleversion(),所以得不到新版本號的快取資料,就從資料庫查到,然後生成新版本的快取,舊的快取在時間過期之後會自動釋放記憶體空間。

PHP用memcached做實時分頁

用memcached做分頁快取,可能很多人會覺得麻煩而不用。因為在增加 修改 刪除的過程中,你不知道會影響到哪些資料,而如果把所有分頁相關的資料快取都刪除並重新生成一遍,實現又很麻煩,甚至不可行,所以乾脆就用mysql直接分頁,簡單方便,但是這樣效能卻也下降了。本章就講乙個簡單的實現用memcach...

後台實時分頁

分頁通過一定的排序方式,返回對應下標的資料,從而解決了一次性返回大量資料的問題。使用返回開始下標 offset 和資料條數 limit 的分頁方式,資料不隨時間變化的情況下是沒有問題的。這種情況下,更適合用實時分頁的方式來處理。實時分頁處理方式是,多返回乙個引數 max id 這種情況需要寫入資料時...

關於用SQL語句做分頁查詢

乙個關於用sql2005 下用sql語句做分頁查詢的方法.startindex為當前頁起始序號,endindex為當前頁結束記錄序號,可以直接作為引數輸入,也可以通過輸入pagesize和pageindex計算得出 select from select row number over order b...