都說smarty + memcache配合用是很好的最佳化組合,但我不明白為什麼用了smarty還要用memcache~
因為smarty不是有頁面緩衝嗎,比如現在有個頁面A,我規定它緩衝的時間是10分鐘,那它只要每十分鐘邏輯運算一次就可以了。還要memcache有什麼用呢?
能給我舉個小例子說明smarty和memcache在什麼情況下配合使用嗎?
謝謝各位!
回複討論(解決方案)
存的地方不一樣,memcache是存到記憶體中的,smarty是存到硬碟上的,讀資料肯定是從記憶體中讀取快,你看哈這2個的原理吧
存的地方不一樣,memcache是存到記憶體中的,smarty是存到硬碟上的,讀資料肯定是從記憶體中讀取快,你看哈這2個的原理吧
這個我知道啊。。
你的一色就是說:memcache比smarty靜態緩衝要快,對嗎?
既然smarty可以cache了。為什麼還要用 memcache ?
這個道理很簡單:由於運行機制和適用範圍的不同,smarty 只被少數初級php程式員使用;而 memcache 被廣泛的採納,並由此衍生出基於記憶體的資料庫系統
既然smarty可以cache了。為什麼還要用 memcache ?
那是兩種最佳化一般不一塊使嗎?
這個道理很簡單:由於運行機制和適用範圍的不同,smarty 只被少數初級php程式員使用;而 memcache 被廣泛的採納,並由此衍生出基於記憶體的資料庫系統
啊?靜態頁緩衝現在不是挺流行的嗎?
一個是針對資料,一個針對的被訪問的頁面,例如最長用的方式將查詢出來的條資料存入memcache,而有些頁面即時重新整理要求不高的那麼就smarty的緩衝了,作用的範圍不同,就像你吃了胡蘿蔔還要吃西瓜差不多,吃胡蘿蔔是增加維生素C,吃西瓜是增加維生素D,這個如果還迷糊,你可以先不必糾結,等以後慢慢就知道了
一個是針對資料,一個針對的被訪問的頁面,例如最長用的方式將查詢出來的條資料存入memcache,而有些頁面即時重新整理要求不高的那麼就smarty的緩衝了,作用的範圍不同,就像你吃了胡蘿蔔還要吃西瓜差不多,吃胡蘿蔔是增加維生素C,吃西瓜是增加維生素D,這個如果還迷糊,你可以先不必糾結,等以後慢慢就知道了
嗯,那比如現在有一個頁面,要求5分鐘一重新整理就可以,其中有三條從資料庫擷取的結果集。
那我就將這個版面設定成5分鐘靜態緩衝更新一次。
比如這種情況,那用不用memcache不是一樣的嗎?
引用 7 樓 的回複:
一個是針對資料,一個針對的被訪問的頁面,例如最長用的方式將查詢出來的條資料存入memcache,而有些頁面即時重新整理要求不高的那麼就smarty的緩衝了,作用的範圍不同,就像你吃了胡蘿蔔還要吃西瓜差不多,吃胡蘿蔔是增加維生素C,吃西瓜是增加維生素D,這個如果還迷糊,你可以先不必糾結,等以後慢慢就知道了
嗯,那比如現在有一個頁面,要求5分鐘一重新整理就可以,其中有三……
不一樣,因為就算你頁面緩衝了,但是你每次重新整理頁面後台都要select資料庫,只是前台頁面沒有變化而已,但是如果你用了memcache,例如時間也是5分鐘,那麼在這5分鐘時間裡是不會查詢資料庫的,這樣資料庫資源就節省了,是不是啊,而smarty的緩衝不過是省下瞭解析模板變數的作用,其實這兩者之間的關係並不太大,唯一共同點就是都叫緩衝,其他的根本就不能進行對比
引用 8 樓 的回複:
引用 7 樓 的回複:
一個是針對資料,一個針對的被訪問的頁面,例如最長用的方式將查詢出來的條資料存入memcache,而有些頁面即時重新整理要求不高的那麼就smarty的緩衝了,作用的範圍不同,就像你吃了胡蘿蔔還要吃西瓜差不多,吃胡蘿蔔是增加維生素C,吃西瓜是增加維生素D,這個如果還迷糊,你可以先不必糾結,等以後慢慢就知道了
嗯,那比如現在有一個頁面,……
啊???
smarty不是有一個判斷當前頁面是否緩衝了的函數嗎:is_cached()
用它判斷一下,如果已經有緩衝了且沒到期,就不用查資料庫了啊,直接讀靜態檔案了。
兩個不同的東西...像kyzy說的。雖然都說是為快取服務,但是緩衝的具體對象和實現方法不太一樣。雖然經過各種SM後也能夠彼此通融些,但是就有點脫褲子了。
簡單說smarty緩衝最終的結果.memcache緩衝中間的部分.當然這樣說也比較籠統,但多少你能知道他們不是為瞭解決相同問題的交集。
smarty 的 cache 是基於檔案的,可稱為 filecache
訪問檔案肯定要比訪問記憶體要慢
所以才有 smarty + memcache 一說
也就是說可以修改 smarty 將 cache 放到 memcache 中去
至於用什麼,怎麼用,那都是方案問題。與實現技術無關
啊???
smarty不是有一個判斷當前頁面是否緩衝了的函數嗎:is_cached()
用它判斷一下,如果已經有緩衝了且沒到期,就不用查資料庫了啊,直接讀靜態檔案了。
你總不能每個方法都判斷吧
嗯大家說的這兩個東西的區別我瞭解了,謝謝大家!
但是,我現在最困惑的就是不知道在什麼情況下兩者可以配合用,就比如我剛才說的那個例子:
有一個頁面,要求每5分鐘重新整理一次,其中有三條從資料庫擷取的結果集。
我將這個頁面用smarty設定靜態緩衝,且緩衝周期是5分鐘。
然後用smarty的is_cached()方法判斷是否有緩衝且未到期,如果條件成立,就可以直接讀取靜態檔案,反之則重新擷取值。
那像這種情況,即便用memcache儲存這三條結果集,是不是也沒什麼效果了?
那什麼情況兩者能配合著用呢?我只是想知道一個小例子。
謝謝大家!
引用 10 樓 的回複:
啊???
smarty不是有一個判斷當前頁面是否緩衝了的函數嗎:is_cached()
用它判斷一下,如果已經有緩衝了且沒到期,就不用查資料庫了啊,直接讀靜態檔案了。
你總不能每個方法都判斷吧
你是指的在每個控制器的方法裡嗎?
我覺得可以用吧~~~~每個方法裡都用有什麼不好的地方嗎?
其實就是緩衝儲存位置的區別,當你is_cached()判斷可以讀取緩衝之後,smarty就會去讀緩衝,問題是這個緩衝在磁碟上,而磁碟是個比較慢的東西,當訪問量很大時,大量的磁碟讀取就會堵塞,系統的效能就會大幅下降.而memcache在記憶體中,比磁碟要快上幾個數量級,不太會堵塞.