我們的緩衝分為兩級,第一級只是一個PHP數組,有效範圍是Request。而第二級是memcached。這麼做的原因是,很多資料在一個Request周期內需要載入多次,這樣可以減少memcached的網路請求。另外我們的架構也會儘可能的發送memcached的gets命令來擷取資料,從而減少網路請求”, 請使用虛擬碼實現以上緩衝架構
這道題的思路是怎樣的,題目也沒看懂,麻煩幫忙理下思路.
回複內容:
我們的緩衝分為兩級,第一級只是一個PHP數組,有效範圍是Request。而第二級是memcached。這麼做的原因是,很多資料在一個Request周期內需要載入多次,這樣可以減少memcached的網路請求。另外我們的架構也會儘可能的發送memcached的gets命令來擷取資料,從而減少網路請求”, 請使用虛擬碼實現以上緩衝架構
這道題的思路是怎樣的,題目也沒看懂,麻煩幫忙理下思路.
// example:// get_cache('foo');// get_cache(['foo', 'bar']);function get_cache($keys) { static $cache = []; static $memcached; $keys = (array)$keys; $result = $missing = []; foreach ($keys as $key) { if (isset($cache[$key])) { $result[$key] = $cache[$key]; } else { $missing[] = $key; } } if (!$missing) { return $result; } if (!$memcached) { $memcached = new Memcached; } $mresult = $memcached->getMulti($missing); if ($mresult) { foreach ($mresult as $key => $value) { $result[$key] = $cache[$key] = $value; } } return $result;}
我表示也沒有看懂!
就是說要你寫一個PHP緩衝的類,通過這個類來統一的訪問memcached。
然後這個類需要支援一次返回多個資料。
同時,需要對從memcached拿到的資料存一下數組。方便在本次request裡面重複擷取緩衝的時候直接使用。
稍微痛點就在那個對多個資料的查詢和緩衝上面。
簡單的理解是, 已經擷取到了,先緩衝到memcache裡面,如果在一定周期內,需要用到相同的資料,先從memcache裡面讀取, 這個操作時間比較簡短
美圖的筆試題。