PHP用memcached做實時分頁

2022-07-13 07:09:08 字數 1300 閱讀 7993

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

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

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

//

備註:假使下面函式都已經已經初始化$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(),所以得不到新版本號的快取資料,就從資料庫查到,然後生成新版本的快取,舊的快取在時間過期之後會自動釋放記憶體空間。

用memcached做實時分頁快取

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

用PHP來做負載均衡

用php來做負載均衡指南 過去當執行乙個大的web應用時候意味著需要執行乙個大型的web伺服器。因為你的應用吸引了大量的使用者,你將不得不在你的伺服器裡增加更多的記憶體和處理器。今天,大型伺服器 模式已經過去,取而代之的是大量的小伺服器,使用各種各樣的負載均衡技術。更多小伺服器 的優勢超過過去的 大...

linux下memcached單例項 多例項

關於memcached的單例項和多例項,我們不需要像mysql一樣配置那麼麻煩,我們只需要再執行memcached的啟動命令啟動就可以再開啟多個memcahed例項了。不過需要注意的是,一定不能讓它們的埠相同!切記!下面是memcached單機多例項的啟動例項 root nolinux usr lo...