關於Memcache的連線

2021-09-02 03:30:21 字數 3041 閱讀 4744

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

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

發現當前開啟著的連線數(curr_connections)已經達到了上限2048,而命中率 = get_hits/cmd_get * 100 = 75.54% 這個效率已經相當低了,memcached最大同時連線數預設是1024,增加最大連線數命中率應該會有所改變。

關於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...