addserver
在說memcache的長連線(pconnect)和短連線(connect)之前要先說說memcache的addserver,memcache的addserver是增加乙個伺服器到連線池中(addserver沒有連線到伺服器的動作,所以在memcache程序沒有啟動的時候,執行addserver成功也會返回true)。通過 memcache::addserver() 開啟的連線將會在指令碼執行結束後自動關閉,也可以使用 memcache::close()進行手動關閉。當使用這個方法的時候(與memcache::connect()和 memcache::pconnect()相反) 網路連線並不會立刻建立,而是直到真正使用的時候才建立。 因此在加入大量伺服器到連線池中時也是沒有開銷的,因為它們可能並不會被使用。addserver的第三個引數persistent就是是否使用長連線(pconnect),預設是true。
pconnect
memcache::pconnect()和 memcache::connect()非常類似,不同點在於這裡建立的連線是持久化的。這個連線不會在指令碼執行結束後或者memcache::close()被呼叫後關閉。同樣你也可以使用函式memcache_pconnect()。
關於memcache的長連線是如何重用的,這是乙個網友的解釋「persistent為false時的表現是很好理解的,請求來了就連線。請求完畢就關閉對memcache server的連線。至於 persistent為true的情況,處理也是比較簡單的。乙個memcache的連線hash值主要跟host、port以及timeout有關。有乙個連線請求到來時就根據host和port生成乙個hash值,然後查表。有則取出,沒有則新建乙個連線,新建後放入連線池。請求關閉時並不關閉對memcache server的連線,而是把這個連線(在做一些狀態更新後)放入連線池(就是前面提到的那個hash 表),供下次查詢使用。」memcache的長連線(pconnect)開銷較小,但是占用tcp埠。
connect
memcache::connect()建立乙個到memcached服務端的連線。 使用方法 memcache::connect()開啟的連線在指令碼執行結束後會自動關閉。當然,你也可以使用方法 memcache::close()來主動關閉。 同時你也可以使用 memcache_connect()函式來獲取乙個連線。
memcached的連線數
登入到memcache server檢視伺服器的狀態 1
2 telnet 127.0.0.1 11211
stats
得到如下結果
stat pid 23193發現當前開啟著的連線數(curr_connections)已經達到了上限2048,而命中率 = get_hits/cmd_get * 100 = 75.54% 這個效率已經相當低了,memcached最大同時連線數預設是1024,增加最大連線數命中率應該會有所改變。stat uptime 5846159
stat time 1350869831
stat version 1.4.9
stat libevent 1.4.13-stable
stat pointer_size 64
stat rusage_user 18130.632724
stat rusage_system 53822.121793
stat curr_connections 2048
stat total_connections 98471150
stat connection_structures 2383
stat reserved_fds 20
stat cmd_get 3570290772
stat cmd_set 98386836
stat cmd_flush 2
stat cmd_touch 0
stat get_hits 2697025276
stat get_misses 873265496
stat delete_misses 6124562
stat delete_hits 26956415
stat incr_misses 0
stat incr_hits 0
stat decr_misses 0
stat decr_hits 0
stat cas_misses 0
stat cas_hits 0
stat cas_badval 0
stat touch_hits 0
stat touch_misses 0
stat auth_cmds 0
stat auth_errors 0
stat bytes_read 138982259474
stat bytes_written 3052329831433
stat limit_maxbytes 8589934592
stat accepting_conns 1
stat listen_disabled_num 0
stat threads 4
stat conn_yields 2322
stat hash_power_level 21
stat hash_bytes 16777216
stat hash_is_expanding 0
stat expired_unfetched 743266
stat evicted_unfetched 0
stat bytes 1109591787
stat curr_items 2343667
stat total_items 98338176
stat evictions 0
stat reclaimed 1492847
end
關於php使用memcache的詳細引數和示例推薦這篇文章:php操作memcache的使用測試總結
關於memcached的全面解析,這裡有幾篇翻譯不錯的文章
也順便推薦下乙個不錯的memcached圖形化管理監控工具:memadmin
關於memcache許可權的問題
memcache是一套常用的key value快取系統,由於它本身沒有許可權控制模組,所以開放在外網的memcache服務很容易被攻擊者掃瞄發現,通過命令互動可直接讀取memcache中的敏感資訊。修復方案 因memcache無許可權控制功能,所以需要使用者對訪問 進行限制,下面分享4中有效的解決方...
memcache啟動與測試連線
啟動 1 linux環境下 usr local lib memcached d m 2048 u root c 1024 p 11211 p tmp memcached1.pid usr local lib memcached d m 2048 u root c 1024 p 11211 p tmp...
關於memcache實現Mutex模式的解析
實施物件 memcache 設計理論 mutex 設計前提 大量併發訪問並存在cache過期。大併發場合,當cache失效導致同時取不到cache,會同一時間訪問db並回設cache,可能會給系統帶來潛在的超負荷風險。解決方案 方案一 load db之前add乙個mutex key mutex ke...