国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - PHP教程 - php基于Redis消息隊列實現的消息推送的方法

php基于Redis消息隊列實現的消息推送的方法

2019-08-16 11:10SmallForest PHP教程

這篇文章主要介紹了php基于Redis消息隊列實現的消息推送的方法,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

基本知識點

重點用到了以下命令實現我們的消息推送

  • brpop 阻塞模式 從隊列右邊獲取值之后刪除
  • brpoplpush 從隊列A的右邊取值之后刪除,從左側放置到隊列B中

邏輯分析

  • 在普通的任務腳本中寫入push_queue隊列要發送消息的目標,并為目標設置一個要推送的內容,永不過期
  • RedisPushQueue中brpoplpush處理,處理后的值放到temp_queue,主要防止程序崩潰造成推送失敗
  • RedisAutoDeleteTempqueueItems處理temp_queue,這里用到了brpop

代碼實現

普通任務腳本

<?php
foreach ($user_list as $item) {
  //命名規則 業務類型_操作_ID_隨機6位 值 自定義 我自定義的是"推送內容"
  $k_name = 'rabbit_push_' . $item['uid'].'_'.rand(100000,999999);
  $redis->lPush('push_queue',$k_name);//左進隊列
  $redis->set($k_name, '推送內容');
}

RedisPushQueue

<?php
//消息隊列處理推送~
//
 // 守護進程運行
 // nohup php YOURPATH/RedisPushQueue.php & 開啟守護進程運行,修改文件之后需要從新啟動
// blpop 有值則回去 沒值則阻塞 主要就是這個函數在起作用 不過并不安全,程序在執行過程中崩潰就會導致隊列中的內容
 // 永久丟失~
 // BRPOPLPUSH 阻塞模式 右邊出 左邊進 在填寫隊列內容的時候要求從左進入
 //
ini_set('default_socket_timeout', -1); //不超時
require_once 'YOURPARH/Rongcloud.php';

$redis = new \Redis();
$redis->connect('127.0.0.1', 6379);
$redis->select(2);//切換到db2
$redis->setOption(\Redis::OPT_READ_TIMEOUT, -1);

// temp_queue臨時隊列防止程序崩潰導致隊列中內容丟失 0代表永不超時!
While ($key = $redis->brpoplpush('push_queue', 'temp_queue', 0)) {
  if ($val = $redis->get($key)) {
    //rabbit_push_20_175990
    $arr = explode('_', $key);
    if (count($arr) != 4) {
      continue;
    }
    $id = $arr[2];
    push($id, $val);
    //刪除key內容
    $redis->del($key);
  } 
}
function push($id, $v)
{
 //推送操作~
}

RedisAutoDeleteTempqueueItems

<?php
/* 自動處理temp_queue中的元素,這個操作是防止RedisPushQueue崩潰的時候做處理
 處理思路是 使用brpop 命令阻塞處理temp_queue這個隊列中的值,如果能獲取到"值"對應的"值",說明RedisPushQueue執行失敗了
 將值還lpush到push_queue中,以備從新處理
 至于為什么使用brpop命令,是因為在RedisPushQueue中我們使用的是brpoplpush
 nohup php YOURPATH/RedisAutoDeleteTempqueueItems.php & 開啟守護進程運行,修改文件之后需要從新啟動
*/
ini_set('default_socket_timeout', -1); //不超時
$redis = new \Redis();
$redis->connect('127.0.0.1', 6379);
$redis->select(2);//切換到db2
$redis->setOption(\Redis::OPT_READ_TIMEOUT, -1);
  while($key_arr = $redis->brPop('temp_queue',0)){
  if(count($key_arr) != 2){
    continue;
  }
  $key =$key_arr[1];
  if($redis->get($key)){//能獲取到值 說明RedisPushQueue執行失敗
    $redis->lPush('push_queue',$key);
  }
}

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 蜜月久综合久久综合国产 | 91伊人 | 国产视频网 | 九九热视频精品在线观看 | 天堂资源最新在线 | 国产一区二区在线免费 | 久久影院免费观看 | 国产人成精品一区二区三 | 中文字幕免费视频 | 日韩毛片一区二区三区 | 国产精品日本一区二区不卡视频 | 欧美狠狠操 | 黄色短片免费看 | 97色在线观看免费视频 | 91精品国产九九九久久久亚洲 | 中文字幕,久热精品,视频在线 | 免费的成人毛片 | 亚洲成人精品在线观看 | 中文字幕123| 日韩久久久久久 | 国产成人精品一区二区三区福利 | 在线观看av网站永久 | 欧美成人精品高清视频在线观看 | 欧美精品三区 | 成人精品视频99在线观看免费 | 精品香蕉一区二区三区 | 久久精品国产免费 | 国产美女视频网站 | 伊人在线 | yy6080久久伦理一区二区 | 日韩精品久久久 | 日韩精品视频在线 | 免费一级电影 | 亚洲三区在线观看 | 亚洲国产精品久久 | 欧美日韩一二区 | 欧美在线综合 | 在线毛片观看 | 欧美成人精品一区二区三区 | 久久99精品国产麻豆婷婷洗澡 | 日韩有码在线播放 |