国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

memcache深入解析

2019-11-08 20:38:31
字體:
來源:轉載
供稿:網友

1.為什么要使用memcache由于網站的高并發讀寫需求,傳統的關系型數據庫開始出現瓶頸,例如:1)對數據庫的高并發讀寫:關系型數據庫本身就是個龐然大物,處理過程非常耗時(如解析SQL語句,事務處理等)。如果對關系型數據庫進行高并發讀寫(每秒上萬次的訪問),那么它是無法承受的。2)對海量數據的處理:對于大型的SNS網站,每天有上千萬次的蘇劇產生(如twitter, 新浪微博)。對于關系型數據庫,如果在一個有上億條數據的數據表種查找某條記錄,效率將非常低。使用memcache能很好的解決以上問題。在實際使用中,通常把數據庫查詢的結果保存到Memcache中,下次訪問時直接從memcache中讀取,而不再進行數據庫查詢操作,這樣就在很大程度上減少了數據庫的負擔。保存在memcache中的對象實際放置在內存中,這也是memcache如此高效的原因。/2.memcache的安裝和使用這個網上有太多教程了,不做贅言。 

3.基于libevent的事件處理

libevent是個程序庫,它將linux的epoll、BSD類操作系統的kqueue等事件處理功能 封裝成統一的接口。即使對服務器的連接數增加,也能發揮O(1)的性能。memcached使用這個libevent庫,因此能在Linux、BSD、Solaris等操作系統上發揮其高性能。參考:libevent: http://www.monkey.org/~PRovos/libevent/The C10K Problem: http://www.kegel.com/c10k.html

4.memcache使用實例:

<?php$mc = new Memcache();$mc->connect('127.0.0.1', 11211);$uid = (int)$_GET['uid'];$sql = "select * from users where uid='uid' ";$key = md5($sql);if(!($data = $mc->get($key))) {    $conn = MySQL_connect('localhost', 'test', 'test');    mysql_select_db('test');    $result = mysql_fetch_object($result);    while($row = mysql_fetch_object($result)) {          $data[] = $row;    }    $mc->add($key, $datas);}var_dump($datas);?>

5.memcache如何支持高并發(此處還需深入研究)

memcache使用多路復用I/O模型,如(epoll, select等),傳統I/O中,系統可能會因為某個用戶連接還沒做好I/O準備而一直等待,知道這個連接做好I/O準備。這時如果有其他用戶連接到服務器,很可能會因為系統阻塞而得不到響應。

而多路復用I/O是一種消息通知模式,用戶連接做好I/O準備后,系統會通知我們這個連接可以進行I/O操作,這樣就不會阻塞在某個用戶連接。因此,memcache才能支持高并發。

此外,memcache使用了多線程機制。可以同時處理多個請求。線程數一般設置為CPU核數,這研報告效率最高。

6.使用Slab分配算法保存數據

slab分配算法的原理是:把固定大小(1MB)的內存分為n小塊,如下圖所示:

/

slab分配算法把每1MB大小的內存稱為一個slab頁,每次向系統申請一個slab頁,然后再通過分隔算法把這個slab頁分割成若干個小塊的chunk

 再總結MemCache的特性和限制

  上面已經對于MemCache做了一個比較詳細的解讀,這里再次總結MemCache的限制和特性:

  1、MemCache中可以保存的item數據量是沒有限制的,只要內存足夠

  2、MemCache單進程在32位機中最大使用內存為2G,這個之前的文章提了多次了,64位機則沒有限制

  3、Key最大為250個字節,超過該長度無法存儲

  4、單個item最大數據是1MB,超過1MB的數據不予存儲

  5、MemCache服務端是不安全的,比如已知某個MemCache節點,可以直接telnet過去,并通過flush_all讓已經存在的鍵值對立即失效

  6、不能夠遍歷MemCache中所有的item,因為這個操作的速度相對緩慢且會阻塞其他的操作

  7、MemCache的高性能源自于兩階段哈希結構:第一階段在客戶端,通過Hash算法根據Key值算出一個節點;第二階段在服務端,通過一個內部的Hash算法,查找真正的item并返回給客戶端。從實現的角度看,MemCache是一個非阻塞的、基于事件的服務器程序

  8、MemCache設置添加某一個Key值的時候,傳入expiry為0表示這個Key值永久有效,這個Key值也會在30天之后失效,


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 宁乡县| 通榆县| 雷州市| 成都市| 基隆市| 六盘水市| 若尔盖县| 福清市| 晋宁县| 江陵县| 富源县| 安丘市| 伊川县| 山阴县| 金阳县| 桓台县| 天祝| 湖南省| 兴文县| 海城市| 高邮市| 灵台县| 双桥区| 永善县| 宁陕县| 贵德县| 保山市| 鄄城县| 娄底市| 永定县| 遂平县| 安国市| 台北市| 宜昌市| 鄯善县| 乌海市| 宜黄县| 夏邑县| 江川县| 黄梅县| 苍南县|