zoukankan      html  css  js  c++  java
  • 关于Memcache的连接

    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

  • 相关阅读:
    Handler
    declare-styleable的使用
    Android APK反编译就这么简单 详解(附图)
    webview与js交互
    Android 开源框架ActionBarSherlock 和 ViewPager 仿网易新闻客户端
    eclipse中的.project 和 .classpath文件的具体作用
    android:关于主工程和library project
    block,inline和inline-block概念和区别
    容易被忽略CSS特性
    CSS里常见的块级元素和行内元素
  • 原文地址:https://www.cnblogs.com/moqiang02/p/4061271.html
Copyright © 2011-2022 走看看