ThinkSNS 快取資料原理簡單研究

2021-07-03 15:43:02 字數 2113 閱讀 4259

研究背景:不是很熟悉php語言,通過 echo輸出、工作搜尋等方式倒推出這個流程出來的..........

通過該位址就定位到了:indexaction----》function index-----》$this->display();---》$this->fetch-------》 return fetch($templatefile, $this->tvar, $charset, $contenttype, $display);

研究發現最後乙個fetch會被呼叫多次,第一次的入口就如上面的分析流程,至於第二次第三次的根源入口不詳

其中某次呼叫fetch時是返回的我關注的微博資料,下面我們來倒推下這個微博資料的**吧

2.fetch-------------》widget-----》renderfile(倒推)

rederfile是對指定的模板和陣列資料進行結合並且輸出

---->feedlistwidget--->getdata---->render  這是widget的子類,作用是獲取微博的資料,並且加以渲染

其中 getdata中$list =  model('feed')->getfollowingfeed($where,$this->limitnums,'',$var['fgid'],$max);實際上拉取到了微博內容

對應方法定義在feedmodel---getfollowingfeed

其中    $feedlist['data'] = $this->getfeeds($feed_ids);實際拉倒到了微博資訊

其中$cachelist = model('cache')->getlist('fd_', $feed_ids);拉倒到了微博資訊

對應在cachemodel的getlist

其中$data[$k] = $this->get($_k)獲取資料

其中  $data = $this->handler->get($key);// 獲取快取資料,其中的key就是feed表中的主鍵

而handler:$this->handler = cache::getinstance($type);

handler是乙個cache例項,是檔案快取的控制代碼(protected $type = 'file';                // 快取型別,預設為檔案快取)

綜合上面的流程來看,其實就是從快取檔案中讀取資料,並且與相應的模板結合輸出到瀏覽器,但是對於微博的key每次都是要從資料庫讀取出來的,

那麼還有乙個問題值得我們思考的就是,是誰呼叫了feedlistwidget.render呢,經過查詢,發現是被function.inc.php中的w函式呼叫了

那麼w函式在**呢,看這個

這個是第一次進入fetch中輸出的乙個模板檔案,模板檔案中有這麼一句話

<?php echo w('feedlist',array('type'=>$type,'feed_type'=>$feed_type,'feed_key'=>$feed_key,'fgid'=>t($_get['fgid'])));?>

哈哈,原來就是在這裡使用了w函式,到此我們就分析出來了微博內容是因為我們訪問了那個url ,得到模板檔案,而模板檔案使用了w函式,

然後進行了render呼叫,然後響應的widget例項,呼叫fetch函式從而把其他小模板和資料集合渲染出來,看樣子,我們開始的那個 模板檔案相當於

這個頁面的嚮導模板,通過這個嚮導,我們把各個零散的模板組織在一起從而呈現出乙個頁面出來

思考1:既然每次還是要讀取資料庫,那麼如何保證資料庫的效能呢?

feedmodel裡查詢我關注的微博首先查詢我關注的使用者發表的微博id,通過聯合查詢區查詢

$table = "feed as a left join user_follow as b on a.uid=b.fid and b.uid = ";

關於這一點,我很頭疼,資料量一旦過大必然會導致效能的降低,如何做好分庫分表值得深思解決!

思考2:檔案快取是如何保持它的高效效能呢?如何切換到別的快取呢?

我們可以把快取用成memcache,然而這個cache我想也是需要切割的,那麼如何有效的和資料庫分庫分表結合到一起呢,值得深思

輕社交軟體系統ThinkSNS簡正式發布

摘要 超輕量核心功能軟體系統,百萬創業者軟體專案口碑之選。伴隨國內外創業風潮 ai 區塊鏈等網際網路軟體科技領域的高速發展,2019 年thinksns軟體品牌迎來十週年後的新紀元。作為下乙個時間的產品元年,thinksns官方於 2019 年 5 月正式發售輕量核心社交app系統 thinksns...

ConcurrentHashMap 原理簡要分析

在之前寫過hashtable 與hashmap 兩者之間的異同 通過前面文章,可以知道hashmap 中未進行同步考慮,而 hashtable 則使用了 synchronized 帶來的直接影響就是可選擇,我們可以在單執行緒時使用 hashmap 提高效率,而多執行緒時用 hashtable 來保證...

Mybatis快取原理以及資料庫快取策略

executor與sqlsession的關係就像市長與書記,sqlsession只是個門面,真正幹事的是executor,sqlsession對資料庫的操作都是通過executor來完成的。與sqlsession一樣,executor也是動態建立的 localcache本質是乙個hashmap,使用...