久久久久久久av_日韩在线中文_看一级毛片视频_日本精品二区_成人深夜福利视频_武道仙尊动漫在线观看

PHP使用Redis長連接的方法詳解

這篇文章主要介紹了PHP使用Redis長連接的方法,結(jié)合實(shí)例形式詳細(xì)分析php操作redis長連接的使用方法及相關(guān)注意事項(xiàng),需要的朋友可以參考下

本文實(shí)例講述了PHP使用Redis長連接的方法。分享給大家供大家參考,具體如下:

php-redis在github上的項(xiàng)目地址:https://github.com/phpredis/phpredis

pconnect函數(shù)聲明

其中time_out表示客戶端閑置多少秒后,就斷開連接。函數(shù)連接成功返回true,失敗返回false:

pconnect(host, port, time_out, persistent_id, retry_interval)
    host: string. can be a host, or the path to a unix domain socket
    port: int, optional
    timeout: float, value in seconds (optional, default is 0 meaning unlimited)
    persistent_id: string. identity for the requested persistent connection
    retry_interval: int, value in milliseconds (optional)

下面的例子詳細(xì)介紹了pconnect連接的重用情況。

$redis->pconnect('127.0.0.1', 6379);
$redis->pconnect('127.0.0.1'); // 默認(rèn)端口6379,跟上面的例子使用相同的連接。
$redis->pconnect('127.0.0.1', 6379, 2.5); // 設(shè)置了2.5秒的過期時(shí)間。將是不同于上面的新連接
$redis->pconnect('127.0.0.1', 6379, 2.5, 'x'); //設(shè)置了持久連接的id,將是不同于上面的新連接
$redis->pconnect('/tmp/redis.sock'); // unix domain socket - would be another connection than the four before.

pconnect使用介紹

對(duì)pconnect方法簡(jiǎn)單描述

使用該方法創(chuàng)建連接,連接不會(huì)在調(diào)用close方法之后關(guān)閉,只有在進(jìn)程結(jié)束之后該連接才會(huì)被關(guān)閉。

[待驗(yàn)證]如果使用的是長連接,Redis配置文件中的timeout配置項(xiàng)需要設(shè)置為0,否則連接池中的連接會(huì)因?yàn)槌瑫r(shí)而失效

針對(duì)PHP-FPM來說明一下pconnect

長連接只會(huì)在PHP-FPM進(jìn)程結(jié)束之后結(jié)束,連接的生命周期就是PHP-FPM進(jìn)程的生命周期。
相比較短連接而言,在每一個(gè)PHP-FPM調(diào)用過程中都會(huì)產(chǎn)生一個(gè)redis的連接,在服務(wù)器上的表性形式就是過多的time_out連接狀態(tài)。
而長連接相反,PHP-FPM調(diào)用的所有CGI都只會(huì)共用一個(gè)長連接,所以也就是只會(huì)產(chǎn)生固定數(shù)量的time_out。

關(guān)閉長連接

可以調(diào)用close和unset方法,但兩則差異很大:

- close的作用僅僅是使當(dāng)前PHP進(jìn)程不能再進(jìn)行redis請(qǐng)求,但無法真正關(guān)閉redis長連接,連接在后續(xù)請(qǐng)求中仍然會(huì)被重用,直FPM進(jìn)程生命周期結(jié)束。所以close 并不會(huì)銷毀redis對(duì)象,只是斷開連接而已。

- unset 變量才會(huì)銷毀。也需要注意并不是使用了 pconnect 就不要 close 了,如果當(dāng)前腳本執(zhí)行時(shí)間很長 那么也會(huì)一直占用一個(gè)連接的。

如何判斷當(dāng)前Redis是否處于連接狀態(tài)

等效的問題是,在單例模式中,判斷當(dāng)前實(shí)例是否有效。

習(xí)慣上調(diào)用echo,判斷是否正常返回字符串本身,或者調(diào)用ping,查看返回值是否為 +PONG。

但是需要特別小心的是,在redis斷開連接之后,調(diào)用echo以及ping(返回'+POMG')時(shí),均會(huì)拋出異常。所以要通過異常捕獲機(jī)制來處理。

代碼分析pconnect連接重用的問題

情況一:非單例模式。

說明:a實(shí)例和b實(shí)例共用了一條連接,b實(shí)例將a實(shí)例的連接修改了:
所以下面的例子導(dǎo)致最終$a實(shí)例得到的值變成了2,需要特別注意。

$a = pconnect(host, port, time_out);
select(3);
$a -> setex(id, 3);
echo $a -> get(id);
//之后執(zhí)行下面的連接
$b = pconnect(host, port, time_out);
select(2);
$b->set(id,2)
echo $a->get(id);  //這個(gè)id操作的db變成了2,不再是之前的3了。因?yàn)檫@兩個(gè)連接共用了一個(gè)連接通道。

情況二:?jiǎn)卫J健?/strong>

將上述的代碼修改,a和b都通過getInstance來生成。生成的前提是判斷當(dāng)前實(shí)例是否存在。單例模式的混淆點(diǎn)在于:

$a生成了一個(gè)實(shí)例,這時(shí)候生成$b, $b使用了$a的實(shí)例,然后修改了$a的連接,之后調(diào)用$a肯定是調(diào)用的$b修改之后的實(shí)例。跟情況二一致。
單例模式的代碼如下:

public static function getInstance($db = 0)
{
  if (!isset(self::$_instance)) {
    self::$_instance = new Redis();
  }
  self::_connect();
  self::$_instance->select($db);
  return self::$_instance;
}

兩種情況都說明了連接重用的問題。如何修復(fù)這個(gè)bug??jī)牲c(diǎn):

1.為每一個(gè)db生成一個(gè)單例。
2.避免連接重用問題。

所以代碼可以做調(diào)整為返回一個(gè)單例數(shù)組:

public static function getInstance($db = 0)
{
  try{
    if (isset(self::$_instance[$db]) && self::$_instance[$db]->Ping() == 'Pong') {
      return self::$_instance[$db];
    }
  } catch (Exception $e) {
  }
  self::$_instance[$db] = new Redis();
  self::_connect($db);
  return self::$_instance[$db];
}

需要注意的地方

避免在Task類成員變量中使用redis對(duì)象。

【網(wǎng)站聲明】本站除付費(fèi)源碼經(jīng)過測(cè)試外,其他素材未做測(cè)試,不保證完整性,網(wǎng)站上部分源碼僅限學(xué)習(xí)交流,請(qǐng)勿用于商業(yè)用途。如損害你的權(quán)益請(qǐng)聯(lián)系客服QQ:2655101040 給予處理,謝謝支持。

相關(guān)文檔推薦

這篇文章主要介紹了PHP有序表查找之插值查找算法,簡(jiǎn)單分析了插值查找算法的概念、原理并結(jié)合實(shí)例形式分析了php實(shí)現(xiàn)針對(duì)有序表插值查找的相關(guān)操作技巧,需要的朋友可以參考下
下面小編就為大家分享一篇ThinkPHP整合datatables實(shí)現(xiàn)服務(wù)端分頁的示例代碼,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
下面小編就為大家分享一篇PHP實(shí)現(xiàn)APP微信支付的實(shí)例講解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
這篇文章主要介紹了PHP實(shí)現(xiàn)的多維數(shù)組排序算法,結(jié)合實(shí)例形式對(duì)比分析了php針對(duì)多維數(shù)組及帶有鍵名的多維數(shù)組進(jìn)行排序相關(guān)操作技巧與注意事項(xiàng),需要的朋友可以參考下
這篇文章主要為大家詳細(xì)介紹了php結(jié)合ajaxuploadfile實(shí)現(xiàn)無刷新文件上傳功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
本篇文章給大家詳細(xì)介紹了PHP開發(fā)接口使用RSA進(jìn)行加密解密方法,對(duì)此有興趣的朋友可以學(xué)習(xí)下。
主站蜘蛛池模板: 中文字幕亚洲视频 | 人操人人干人 | 国产电影一区二区在线观看 | 久久精品综合网 | 久久久久久久久蜜桃 | 日韩在线精品视频 | 激情网五月天 | 青青草在线视频免费观看 | 天天拍天天色 | 91在线最新| 亚洲一区二区中文字幕 | 精国产品一区二区三区四季综 | 国产精品视频久久 | 一区二区高清在线观看 | 欧美v日韩v| 男人视频网站 | 精品九九在线 | 欧美白人做受xxxx视频 | 国产精品久久久久久久久久久免费看 | 老牛影视av一区二区在线观看 | 亚洲精品www | 天堂在线中文字幕 | 精品视频 免费 | 日韩精品无码一区二区三区 | 成人免费共享视频 | 国产精品视频网 | 亚洲一区精品在线 | 91亚洲精品在线 | 国产一区在线免费 | 91看片网| 狠狠插天天干 | 欧美一区二区在线视频 | 国产精品区二区三区日本 | 日韩超碰在线 | 国产伦精品一区二区三区照片91 | 日韩精品视频中文字幕 | 国产目拍亚洲精品99久久精品 | 天天操天天插 | 日韩三级在线观看 | 日本色高清 | 一级毛片视频在线 |