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

  • 相关阅读:
    《大话数据结构》第1章 数据结构绪论 1.2 你数据结构怎么学的?
    伍迷七八月新浪微博集锦
    《大话数据结构》第9章 排序 9.7 堆排序(下)
    《大话数据结构》第3章 线性表 3.8.2 单链表的删除
    《大话数据结构》第9章 排序 9.5 直接插入排序
    《大话数据结构》第9章 排序 9.8 归并排序(上)
    《大话数据结构》第2章 算法基础 2.9 算法的时间复杂度
    《大话数据结构》第1章 数据结构绪论 1.1 开场白
    《大话数据结构》第9章 排序 9.1 开场白
    [AWS] Assign a public IP address to an EC2 instance after launched
  • 原文地址:https://www.cnblogs.com/moqiang02/p/4061271.html
Copyright © 2011-2022 走看看