• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
  • PHP超時處理全面總結(4)

    發表于:2013-10-28來源:酷勤網作者:不詳點擊數: 標簽:php
    那么如何在PHP中使用這個操作捏,就需要我們自己定義一些MySQL操作常量,主要涉及的常量有: MYSQL_OPT_READ_TIMEOUT=11; MYSQL_OPT_WRITE_TIMEOUT=12; 這兩個,定義以

      那么如何在PHP中使用這個操作捏,就需要我們自己定義一些MySQL操作常量,主要涉及的常量有:

      MYSQL_OPT_READ_TIMEOUT=11;

      MYSQL_OPT_WRITE_TIMEOUT=12;

      這兩個,定義以后,可以使用options設置相應的值。

      不過有個注意點,mysql內部實現:

      1.超時設置單位為秒,最少配置1秒

      2.但mysql底層的read會重試兩次,所以實際會是3秒

      重試兩次+ 自身一次=3倍超時時間,那么就是說最少超時時間是3秒,不會低于這個值,對于大部分應用來說可以接受,但是對于小部分應用需要優化。

      查看一個設置訪問mysql超時的php實例:

    <?php

    //自己定義讀寫超時常量

    if(!defined('MYSQL_OPT_READ_TIMEOUT')){

    define('MYSQL_OPT_READ_TIMEOUT',11);

    }

    if(!defined('MYSQL_OPT_WRITE_TIMEOUT')){

    define('MYSQL_OPT_WRITE_TIMEOUT',12);

    }

    //設置超時

    $mysqli=mysqli_init();

    $mysqli->options(MYSQL_OPT_READ_TIMEOUT,3);

    $mysqli->options(MYSQL_OPT_WRITE_TIMEOUT,1);

    //連接數據庫

    $mysqli->real_connect("localhost","root","root","test");

    if(mysqli_connect_errno()){

    printf("Connectfailed:%s/n",mysqli_connect_error());

    exit();

    }

    //執行查詢sleep1秒不超時

    printf("Hostinformation:%s/n",$mysqli->host_info);

    if(!($res=$mysqli->query('selectsleep(1)'))){

    echo"query1error:".$mysqli->error."/n";

    }else{

    echo"Query1:querysuccess/n";

    }

    //執行查詢sleep9秒會超時

    if(!($res=$mysqli->query('selectsleep(9)'))){

    echo"query2error:".$mysqli->error."/n";

    }else{

    echo"Query2:querysuccess/n";

    }

    $mysqli->close();

    echo"closemysqlconnection/n";

    ?>

      延伸閱讀:

      http://blog.csdn.net/heiyeshuwu/article/details/5869813

      【Memcached】

      [PHP擴展]

      php_memcache客戶端:

      連接超時:boolMemcache::connect(string$host[,int$port[,int$timeout]])

      在get和set的時候,都沒有明確的超時設置參數。

      libmemcached客戶端:在php接口沒有明顯的超時參數。

      說明:所以說,在PHP中訪問Memcached是存在很多問題的,需要自己hack部分操作,或者是參考網上補丁。

      [C&C++訪問Memcached]

      客戶端:libmemcached客戶端

      說明:memcache超時配置可以配置小點,比如5,10個毫秒已經夠用了,超過這個時間還不如從數據庫查詢。

      下面是一個連接和讀取set數據的超時的C++示例:

    //創建連接超時(連接到Memcached)

    memcached_st*MemCacheProxy::_create_handle()

    {

    memcached_st*mmc=NULL;

    memcached_return_tprc;

    if(_mpool!=NULL){//getfrompool

    mmc=memcached_pool_pop(_mpool,false,&prc);

    if(mmc==NULL){

    __LOG_WARNING__("MemCacheProxy","gethandlefrompoolerror[%d]",(int)prc);

    }

    returnmmc;

    }

    memcached_st*handle=memcached_create(NULL);

    if(handle==NULL){

    __LOG_WARNING__("MemCacheProxy","create_handleerror");

    returnNULL;

    }

    //設置連接/讀取超時

    memcached_behavior_set(handle,MEMCACHED_BEHAVIOR_HASH,MEMCACHED_HASH_DEFAULT);

    memcached_behavior_set(handle,MEMCACHED_BEHAVIOR_NO_BLOCK,_noblock);//參數MEMCACHED_BEHAVIOR_NO_BLOCK為1使超時配置生效,不設置超時會不生效,關鍵時候會悲劇的,容易引起雪崩

    memcached_behavior_set(handle,MEMCACHED_BEHAVIOR_CONNECT_TIMEOUT,_connect_timeout);//連接超時

    memcached_behavior_set(handle,MEMCACHED_BEHAVIOR_RCV_TIMEOUT,_read_timeout);//讀超時

    memcached_behavior_set(handle,MEMCACHED_BEHAVIOR_SND_TIMEOUT,_send_timeout);//寫超時

    memcached_behavior_set(handle,MEMCACHED_BEHAVIOR_POLL_TIMEOUT,_poll_timeout);

    //設置一致hash

    //memcached_behavior_set_distribution(handle,MEMCACHED_DISTRIBUTION_CONSISTENT);

    memcached_behavior_set(handle,MEMCACHED_BEHAVIOR_DISTRIBUTION,MEMCACHED_DISTRIBUTION_CONSISTENT);

    memcached_returnrc;

    for(uinti=0;i<_server_count;i++){

    rc=memcached_server_add(handle,_ips[i],_ports[i]);

    if(MEMCACHED_SUCCESS!=rc){

    __LOG_WARNING__("MemCacheProxy","addserver[%s:%d]failed.",_ips[i],_ports[i]);

    }

    }

    _mpool=memcached_pool_create(handle,_min_connect,_max_connect);

    if(_mpool==NULL){

    __LOG_WARNING__("MemCacheProxy","create_poolerror");

    returnNULL;

    }

    mmc=memcached_pool_pop(_mpool,false,&prc);

    if(mmc==NULL){

    __LOG_WARNING__("MyMemCacheProxy","gethandlefrompoolerror[%d]",(int)prc);

    }

    //__LOG_DEBUG__("MemCacheProxy","gethandle[%p]",handle);

    returnmmc;

    }

    //設置一個key超時(set一個數據到memcached)

    boolMemCacheProxy::_add(memcached_st*handle,unsignedint*key,constchar*value,intlen,unsignedinttimeout)

    {

    memcached_returnrc;

    chartmp[1024];

    snprintf(tmp,sizeof(tmp),"%u#%u",key[0],key[1]);

    //有個timeout值

    rc=memcached_set(handle,tmp,strlen(tmp),(char*)value,len,timeout,0);

    if(MEMCACHED_SUCCESS!=rc){

    returnfalse;

    }

    returntrue;

    }

    原文轉自:http://www.kuqin.com/web/20120808/324135.html

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>