原理和使用詳解_第1頁
原理和使用詳解_第2頁
原理和使用詳解_第3頁
原理和使用詳解_第4頁
原理和使用詳解_第5頁
已閱讀5頁,還剩35頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、Memcached 原理和使用詳解,作者:heiyeluren(黑夜路人),2009-01,博客:,2,Memcached介紹 Memcached安裝和使用 一些技巧 Q while (c = *key+) hash += c; return hash % serverTotal; /服務(wù)器列表 node0 = :11211 node1 = :11211 node2 = :11211 /獲取key是tokyo的節(jié)點ID(服務(wù)器ID) int id = getServerId(test, 3); /得出的結(jié)果是1,那么對應(yīng)的機器就

2、是 nodeid = node1,17,Memcached介紹:,基于客戶端的Memcached分布式 寫入操作 讀取操作,18,Memcached安裝和使用:,Memcached 安裝 Memcached 與 PHP 結(jié)合使用 Memcached 與 C/C+ 結(jié)合使用,19,Memcached安裝和使用:,Memcached 安裝,安裝步驟: 先安裝 libevent 再安裝 Memcached 主程序 源碼下載:(最新版) libevent官網(wǎng):/provos/libevent/ libevent下載:/provos/lib

3、event-1.4.9-stable.tar.gz Memcached官網(wǎng): Memcached下載:,20,Memcached安裝和使用:,Memcached 安裝,安裝 libevent # tar zxvf libevent-1.4.9-stable.tar.gz # cd libevent-1.4.9-stable # ./configure -prefix=/usr # make # make install 安裝 Memcached # tar zxvf memcached-1.2.6.tar.gz # cd memcached-1.2.6 # ./configure -prefi

4、x=/usr/local# make# make install,21,Memcached安裝和使用:,Memcached 運行,試運行 Memcached # /usr/local/bin/memcached -u hualiangxie,22,Memcached安裝和使用:,Memcached 運行,查看Memcached 幫助信息 # /usr/local/bin/memcached -h,23,Memcached安裝和使用:,Memcached 運行,關(guān)注基本選項 -p 監(jiān)聽的TCP端口 (缺省: 11211) -d 以守護進程方式運行Memcached -u 運行Memcached的

5、賬戶,非root用戶 -m 最大的內(nèi)存使用, 單位是MB,缺省是 64 MB -c 軟連接數(shù)量, 缺省是 1024 -v 輸出警告和錯誤信息 -vv 打印客戶端的請求和返回信息 -h 打印幫助信息 -i 打印memcached和libevent的版權(quán)信息 運行 Memcached 目標:使用11211端口、hualiangxie用戶、最大占用512M內(nèi)存、1024個軟連接,輸出客戶端請求,以守護進程方式運行 # /usr/local/bin/memcached -p 11211 -d -u hualiangxie -m 512 -c 1024 -vvv,24,Memcached安裝和使用:,M

6、emcached 運行,檢查是否正常啟動 # pa auxxww | grep memcached 1001 4402 0.0 0.0 2296 900 pts/0 S+ 19:24 0:00 /usr/local/bin/memcached -u hualiangxie root 4547 0.0 0.0 1892 668 pts/3 S+ 19:42 0:00 grep memcached # telnet localhost 11211 Trying . Connected to localhost. Escape character is . stats STAT p

7、id 4402 STAT uptime 1032 STAT time 1231155683 STAT version 1.2.6 STAT pointer_size 32 . END,25,Memcached安裝和使用:,Memcached 基本協(xié)議,數(shù)據(jù)存取 set key1 0 180 3 abc STORED add key1 0 180 3 xyz NOT_STORED get key1 VALUE key1 0 3 abc END replace key1 0 180 3 xyz STORED get key1 VALUE key1 0 3 xyz END delete key1 D

8、ELETED,數(shù)字加減 set key2 0 180 4 1234 STORED incr key2 3 1237 get key2 VALUE key2 0 4 1237 END decr key2 1 1236 get key2 VALUE key2 0 4 1236 END,26,Memcached安裝和使用:,Memcached 和 PHP 結(jié)合使用,安裝 PHP Memcache 擴展 擴展官網(wǎng): 擴展下載: Memcache擴展安裝: # tar zxvf memcache-2.2.4.tgz # cd memcache-2.2.4 # /usr/local/php/bin/php

9、ize # ./configure -with-php-config=/usr/local/php/bin/php-config # make # make install 配置 # ls -l /usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/memcache.so # vim /usr/local/php/lib/php.ini 新增配置內(nèi)容:extension_dir = /usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/extension = me

10、mcache.so檢查安裝結(jié)果# /usr/local/php/bin/php -m # /usr/local/apache2/bin/apachectl restart,27,Memcached安裝和使用:,Memcached 與 PHP 結(jié)合使用,PHP與Memcache結(jié)合測試代碼 connect(localhost, 11211); /保存數(shù)據(jù) $mem-set(key1, This is first value, 0, 60); $val = $mem-get(key1); echo Get key1 value: . $val .; /替換數(shù)據(jù) $mem-replace(key1,

11、 This is replace value, 0, 60); $val = $mem-get(key1); echo Get key1 value: . $val . ; /保存數(shù)組數(shù)據(jù) $arr = array(aaa, bbb, ccc, ddd); $mem-set(key2, $arr, 0, 60); $val2 = $mem-get(key2); echo Get key2 value: ; print_r($val2); echo ;,/刪除數(shù)據(jù) $mem-delete(key1); $val = $mem-get(key1); echo Get key1 value: . $

12、val . ; /清除所有數(shù)據(jù) $mem-flush(); $val2 = $mem-get(key2); echo Get key2 value: ; print_r($val2); echo ; /關(guān)閉連接 $mem-close(); ?,28,Memcached安裝和使用:,Memcached 與 PHP 結(jié)合使用,PHP與Memcache分布式 在一臺或者多臺機器啟用一個或者多個進程,這里是在一臺機器啟用兩個進程,使用兩個端口: # /usr/local/bin/memcached -p 11211 -d -u hualiangxie # /usr/local/bin/memcache

13、d -p 11212 -d -u hualiangxie PHP 測試代碼 addServer(localhost, 11211); $mem-addServer(localhost, 11212); /保存數(shù)據(jù) $mem-set(key1, This is first value, 0, 60); $val = $mem-get(key1); echo Get key1 value: . $val .; /保存數(shù)組數(shù)據(jù) $arr = array(aaa, bbb, ccc, ddd); $mem-set(key2, $arr, 0, 60); $val2 = $mem-get(key2);

14、echo Get key2 value: ; print_r($val2); echo ;,/刪除數(shù)據(jù) $mem-delete(key1); $val = $mem-get(key1); echo Get key1 value: . $val . ; /關(guān)閉連接 $mem-close(); ? 注意:實際上Key1保存在11211端口機器,Key2保存在11212端口機器上,29,Memcached安裝和使用:,Memcached 和 C/C+ 結(jié)合使用,安裝 C/C+ Memcached 客戶端庫:libmemcached 開發(fā)庫官網(wǎng):/552/libmem

15、cached.html 開發(fā)庫下載:/libmemcached-0.25.tar.gz libmemcached庫安裝: # tar zxvf libmemcached-0.25.tar.gz # cd libmemcached-0.25 # ./configure -prefix=/usr # make # make install 檢查安裝結(jié)果# ls /usr/lib/libmemcache* /庫文件 # ls /usr/include/libmemcached/* /頭文件 # ls /usr/bin/mem* /命令行工具 參考

16、libmenmcached 開發(fā)示例代碼 # man libmemcached_examples,30,Memcached安裝和使用:,Memcached 與 C/C+ 結(jié)合使用,C/C+與Memcached結(jié)合測試代碼 #include #include #include #include int main(int argc, char *argv) memcached_st *memc; memcached_return rc; memcached_server_st *servers; char value8191; /connect server memc = memcached_cr

17、eate(NULL); servers = memcached_server_list_append(NULL, localhost, 11211, ,/Fetch data char return_keyMEMCACHED_MAX_KEY; size_t return_key_length; char *return_value; size_t return_value_length; char *keys= key1; size_t key_length= 4; uint32_t flags; rc = memcached_mget(memc, keys, key_length, 1);

18、return_value = memcached_fetch(memc, return_key, ,31,Memcached安裝和使用:,Memcached 與 C/C+ 結(jié)合使用,C/C+與Memcached結(jié)合測試結(jié)果 編譯執(zhí)行以上代碼: # gcc -o c_test1 c_test1.c -lmemcached # ./c_test1 輸出結(jié)果: Save key:key1 data:This is c first value success. Fetch key:key1 data:This is c first value Delete Key key1 success.,32,M

19、emcached安裝和使用:,Memcached 與 C/C+ 結(jié)合使用,C/C+與Memcached分布式結(jié)合測試代碼1 #include #include #include #include int main(int argc, char *argv) memcached_st *memc; memcached_return rc; memcached_server_st *servers; char value8191; /connect multi server memc = memcached_create(NULL); servers = memcached_server_list

20、_append(NULL, localhost, 11211, ,/Save multi data size_t i; char *keys= key1, key2, key3; size_t key_length= 4, 4, 4; char *values = This is c first value, This is c second value, This is c third value; size_t val_length= 21, 22, 21; for (i=0; i 3; i+) rc = memcached_set(memc, keysi, key_lengthi, va

21、luesi, val_lengthi, (time_t)180, (uint32_t)0); if (rc = MEMCACHED_SUCCESS) printf(Save key:%s data:%s success.n, keysi, valuesi); ,33,Memcached安裝和使用:,Memcached 與 C/C+ 結(jié)合使用,C/C+與Memcached分布式結(jié)合測試代碼2 /Fetch multi data char return_keyMEMCACHED_MAX_KEY; size_t return_key_length; char *return_value; size_

22、t return_value_length; uint32_t flags; rc = memcached_mget(memc, keys, key_length, 3); while (return_value = memcached_fetch(memc, return_key, ,/Delete multi data for (i=0; i 3; i+) rc = memcached_set(memc, keysi, key_lengthi, valuesi, val_lengthi, (time_t)180, (uint32_t)0); rc = memcached_delete(me

23、mc, keysi, key_lengthi, (time_t)0); if (rc = MEMCACHED_SUCCESS) printf(Delete %s successn, keysi, valuesi); /free memcached_free(memc); return 0; ,34,Memcached安裝和使用:,Memcached 與 C/C+ 結(jié)合使用,C/C+與Memcached分布式結(jié)合測試結(jié)果 編譯執(zhí)行以上代碼: # gcc -o c_test2 c_test2.c -lmemcached # ./c_test2 輸出結(jié)果: Save key:key1 data:Th

24、is is c first value success. Save key:key2 data:This is c second value success. Save key:key3 data:This is c third value success. Fetch key:key1 data:This is c first value Fetch key:key2 data:This is c second value Fetch key:key3 data:This is c third value Delete key1 success Delete key2 success Del

25、ete key3 success,35,一些經(jīng)驗和技巧:,Memcached一些特性和限制,在 Memcached 中可以保存的item數(shù)據(jù)量是沒有限制的,只有內(nèi)存足夠 Memcached單進程最大使用內(nèi)存為2G,要使用更多內(nèi)存,可以分多個端口開啟多個Memcached進程 最大30天的數(shù)據(jù)過期時間, 設(shè)置為永久的也會在這個時間過期,常量REALTIME_MAXDELTA 60*60*24*30 控制 最大鍵長為250字節(jié),大于該長度無法存儲,常量KEY_MAX_LENGTH 250 控制 單個item最大數(shù)據(jù)是1MB,超過1MB數(shù)據(jù)不予存儲,常量POWER_BLOCK 1048576 進行控

26、制, 它是默認的slab大小 最大同時連接數(shù)是200,通過 conn_init()中的freetotal 進行控制,最大軟連接數(shù)是1024,通過 settings.maxconns=1024 進行控制 跟空間占用相關(guān)的參數(shù):settings.factor=1.25, settings.chunk_size=48, 影響slab的數(shù)據(jù)占用和步進方式,36,一些經(jīng)驗和技巧:,查看Memcached內(nèi)部工作狀態(tài),訪問Memcached:telnet 主機名 端口號 查看總狀態(tài):stats 查看某項狀態(tài):stats curr_connections,禁止LRU,有些情況下LRU機制反倒會造成麻煩。me

27、mcached啟動時通過“-M”參數(shù)可以禁止LRU,如下所示: $ memcached -M -m 1024 啟動時必須注意的是,小寫的“-m”選項是用來指定最大內(nèi)存大小的。不指定具體數(shù)值則使用默認值64MB。 指定“-M”參數(shù)啟動后,內(nèi)存用盡時memcached會返回錯誤。話說回來,memcached畢竟不是存儲器,而是緩存,所以推薦使用LRU。,37,一些經(jīng)驗和技巧:,Memcached使用線程模式工作,在安裝的時候必須打開:./configure -enable-threads 安裝完之后,啟動的時候看看幫助信息有沒有這條: -t number of threads to use, de

28、fault 4 如果存在該選項,說明已經(jīng)支持了線程,就可以在啟動的時候使用 -t 選項來啟動多線程 然后啟動的時候必須加上你需要支持的線程數(shù)量: /usr/local/memcache/bin/memcached -t 1024,38,一些經(jīng)驗和技巧:,調(diào)優(yōu)Slab和內(nèi)存分配1,memcached在啟動時指定 Growth Factor因子(通過-f選項),就可以在某種程度上控制slab之間的差異。默認值為1.25。但是,在該選項出現(xiàn)之前,這個因子曾經(jīng)固定為2,稱為“powers of 2”策略。 讓我們用以前的設(shè)置,以verbose模式啟動memcached試試看: $ memcached

29、-f 2 -vv slab class 1: chunk size 128 perslab 8192 slab class 2: chunk size 256 perslab 4096 slab class 3: chunk size 512 perslab 2048 slab class 4: chunk size 1024 perslab 1024 slab class 5: chunk size 2048 perslab 512 slab class 6: chunk size 4096 perslab 256 slab class 7: chunk size 8192 perslab 128 slab class 8: chunk size 16384 perslab 64 slab class 9: chunk size 32768 perslab 32 slab class 10: chunk size 65536 perslab 16 slab class 11: chunk size 131072 perslab 8 slab class 12: ch

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論