最近在研究memcache和php配合小弟不知道該如何使用呢,是先要把整張表的資料全部查出來,緩衝的記憶體上,然後再做類似sql的查詢嗎?就是直接查記憶體而不是查表這樣嗎?
求大牛給點例子哦
回複內容:
最近在研究memcache和php配合小弟不知道該如何使用呢,是先要把整張表的資料全部查出來,緩衝的記憶體上,然後再做類似sql的查詢嗎?就是直接查記憶體而不是查表這樣嗎?
求大牛給點例子哦
memcache 是 key => value 的方式,一個key 對應 一個 value 。
memcache一般多用於儲存大型能開銷的資料,比如SQL結果集。將其序列化或者json_encode後存入memcache中,並命名為一個唯一的key值。下次則直接從memcached中擷取該值。
註:經過測試serialize 後的string 存入memcached 比 json_encode後的string要快很多。 若直接將array存入memcached實際上memcached底層有將array進行 serialize(array); (我這裡一直記錯!!)
如下執行個體:有資料table threads. 我們將其結果緩衝起來。
// 首先進行查詢memcached中threads_list是否為非空集合$list = json_decode($memcached->get("threads_list"));if(!$list){ $query = $db->query("SELECT * FROM `threads` "); while($value = $db->fetch_array($query)){ $list[] = $value; } //進行memcached插入 //$memcached->set(索引值,內容,失效時間); $memcached->set("threads_list",json_encode($list),86400);}print_r($list);
以上操作將有效減少mysql查詢的開銷。當然memcached並非僅局限於sql的儲存。具體還需要看業務上的需求。
不過強烈推薦redis!!!!!
原理:將你 SQL 查詢的結果緩衝在 memcache 裡,下次執行同樣的查詢就直接從緩衝中讀取,而不用查詢資料庫,緩解資料庫壓力。
connect('localhost','11211'); //準備SQL語句 $sql='SELECT * FROM user'; //設定一個鍵名 $key=md5($sql); $data=$mem->get($key); //第二次之後的查詢 if(!$data){ try{ //連結mysql $dsn="mysql:host=localhost;dbname=bbs"; $pdo=new PDO($dsn,'root','root'); //設定字元集 $pdo->exec('set names utf8'); $stmt=$pdo->prepare($sql); $stmt->execute(); $data=$stmt->fetchAll(); //把資料存放區到memcache中(第一次查詢) $mem->add($key,$data); }catch(PDOException $e){ echo $e->getMessage(); } } $mem->close(); print_r($data);?>
剛錄好的視頻,講Memcache的
近距離探索memcache
同樣的查詢條件,可能能來不一樣的結果,這樣緩衝更新問題如何解決?
先查和後查看你怎麼寫代碼。如果你準備把整個表或者庫都寫進Memcached的呢,那就的把整個商務程序都資料,也就是說每次查詢都是查詢Memcached,相當於是把Memcached當資料庫運用。如果只是簡單的操作,http://segmentfault.com/q/1010000000257857#a-1020000000257889已經說了。其實Memcached這種key、value的儲存,看你key怎麼產生了,如果單機使用的話,用條件來產生就可以了,叢集的話就看你怎麼分key了。