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

php中Redis的應用--消息傳遞

消息傳遞這一應用廣泛存在于各個網站中,這個功能也是一個網站必不可少的。本文主要介紹了php中Redis的應用--消息傳遞。下面跟著小編一起來看下吧

閱讀目錄

1、摘要

2、實現方法

3、一對一消息傳遞

4、多對多消息傳遞

1、摘要

消息傳遞這一應用廣泛存在于各個網站中,這個功能也是一個網站必不可少的。常見的消息傳遞應用有,新浪微博中的@我呀、給你評論然后的提示呀、贊贊贊提示、私信呀、甚至是發微博分享的新鮮事;知乎中的私信呀、live發送過來的消息、知乎團隊消息呀等等。

2、實現方法

消息傳遞即兩個或者多個客戶端在相互發送和接收消息。

通常有兩種方法實現:

第一種為消息推送。Redis內置有這種機制,publish往頻道推送消息、subscribe訂閱頻道。這種方法有一個缺點就是必須保證接收者時刻在線(即是此時程序不能停下來,一直保持監控狀態,假若斷線后就會出現客戶端丟失信息)

第二種為消息拉取。所謂消息拉取,就是客戶端自主去獲取存儲在服務器中的數據。Redis內部沒有實現消息拉取這種機制。因此我們需要自己手動編寫代碼去實現這個功能。

在這里我們,我們進一步將消息傳遞再細分為一對一的消息傳遞,多對多的消息傳遞(群組消息傳遞)。

【注:兩個類的代碼相對較多,因此將其折疊起來了】

3、一對一消息傳遞

例子1:一對一消息發送與獲取

模塊要求:

1、提示有多少個聯系人發來新消息

2、信息包含發送人、時間、信息內容

3、能夠獲取之前的舊消息

4、并且消息能夠保持7天,過期將會被動觸發刪除

Redis實現思路:

1、新消息與舊消息分別采用兩個鏈表來存儲

2、原始消息的結構采用數組的形式存放,并且含有發送人、時間戳、信息內容

3、在推入redis的鏈表前,需要將數據轉換為json類型然后再進行存儲

4、在取出新信息時應該使用rpoplpush來實現,將已讀的新消息推入舊消息鏈表中

5、取出舊消息時,應該用舊消息的時間與現在的時間進行對比,若超時,則直接刪除后面的全部數據(因為數據是按時間一個一個壓進鏈表中的,所以對于時間是有序排列的)

數據存儲結構圖:

PHP的實現代碼:

#SinglePullMessage.class.php

<?php
#單接接收者接收消息
class SinglePullMessage
{
 private $redis=''; #存儲redis對象
 /**
 * @desc 構造函數
 * 
 * @param $host string | redis主機
 * @param $port int | 端口
 */
 public function __construct($host,$port=6379)
 {
 $this->redis=new Redis();
 $this->redis->connect($host,$port);
 } 
 /**
 * @desc 發送消息(一個人)
 * 
 * @param $toUser string | 接收人
 * @param $messageArr array | 發送的消息數組,包含sender、message、time 
 *
 * @return bool
 */
 public function sendSingle($toUser,$messageArr)
 {
 $json_message=json_encode($messageArr); #編碼成json數據
 return $this->redis->lpush($toUser,$json_message); #將數據推入鏈表 
 }
 /**
 * @desc 用戶獲取新消息
 *
 * @param $user string | 用戶名
 *
 * @return array 返回數組,包含多少個用戶發來新消息,以及具體消息
 */
 public function getNewMessage($user)
 {
 #接收新信息數據,并且將數據推入舊信息數據鏈表中,并且在原鏈表中刪除
 $messageArr=array();
 while($json_message=$this->redis->rpoplpush($user, 'preMessage_'.$user))
 {
  $temp=json_decode($json_message); #將json數據變成對象
  $messageArr[$temp->sender][]=$temp; #轉換成數組信息
 }
 if($messageArr)
 {
  $arr['count']=count($messageArr); #統計有多少個用戶發來信息
  $arr['messageArr']=$messageArr;
  return $arr;
 }
 return false;
 }
 public function getPreMessage($user)
 {
 ##取出舊消息
 $messageArr=array();
 $json_pre=$this->redis->lrange('preMessage_'.$user, 0, -1); #一次性將全部舊消息取出來
 foreach ($json_pre as $k => $v) 
 {
  $temp=json_decode($v);  #json反編碼
  $timeout=$temp->time+60*60*24*7; #數據過期時間 七天過期
  if($timeout<time())  #判斷數據是否過期
  {
  if($k==0)   #若是最遲插入的數據都過期了,則將所有數據刪除
  {
   $this->redis->del('preMessage_'.$user);
   break;
  }
  $this->redis->ltrim('preMessage_'.$user, 0, $k); #若檢測出有過期的,則將比它之前插入的所有數據刪除
  break;
  }
  $messageArr[$temp->sender][]=$temp;
 }
 return $messageArr;
 }
 /**
 * @desc 消息處理,沒什么特別的作用。在這里這是用來處理數組信息,然后將其輸出。 
 *
 * @param $arr array | 需要處理的信息數組
 *
 * @return 返回打印輸出
 */
 public function dealArr($arr)
 {
 foreach ($arr as $k => $v) 
 {
  foreach ($v as $k1 => $v2) 
  {
  echo '發送人:'.$v2->sender.' 發送時間:'.date('Y-m-d h:i:s',$v2->time).'<br/>';
  echo '消息內容:'.$v2->message.'<br/>';
  }
  echo "<hr/>";
 }
 }
}

測試:

1、發送消息

【網站聲明】本站除付費源碼經過測試外,其他素材未做測試,不保證完整性,網站上部分源碼僅限學習交流,請勿用于商業用途。如損害你的權益請聯系客服QQ:2655101040 給予處理,謝謝支持。

相關文檔推薦

標簽作用:用于根據條件輸出不同內容 1、IF語句格式: {pboot:if(a==b)} 內容1 {else} 內容2 {/pboot:if} 使用提示: 對于非數字類的條件均為字符串類型,請加上引號,如:{pboot:if([list:author]
這篇文章主要介紹了PHP使用Redis長連接的方法,結合實例形式詳細分析php操作redis長連接的使用方法及相關注意事項,需要的朋友可以參考下
本文給大家分享的是如何把PHP應用容器化,以及使用docker在服務器上部署PHP應用,非常的簡單實用,有需要的小伙伴可以參考下
下面小編就為大家分享一篇php打開本地exe程序,js打開本地exe應用程序,并傳遞相關參數方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
這篇文章主要為大家詳細介紹了php+redis消息隊列搶購實現代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下
這篇文章主要為大家詳細介紹了php+redis實現商城秒殺功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下
主站蜘蛛池模板: 久久综合一区 | 亚洲人人舔人人 | 91极品欧美视频 | 99久久国产综合精品麻豆 | 国产激情一区二区三区 | 精品久久久久久久久久 | 国产三级一区二区 | 成年免费大片黄在线观看岛国 | 免费视频一区二区 | 一级毛片免费完整视频 | 精品免费在线 | 特黄av| 亚洲国产精品人人爽夜夜爽 | 一区日韩| 亚洲精品区 | 亚洲色图图片 | 在线观看www | 一级免费毛片 | 欧美精品在线观看 | www.中文字幕.com | 男女网站在线观看 | 九一在线观看 | 国产高清视频一区二区 | 999久久精品| 91黄色免费看 | 一a一片一级一片啪啪 | 亚洲欧美激情国产综合久久久 | 北条麻妃av一区二区三区 | 在线看av网址 | 久久精品国产99国产精品 | 在线中文字幕第一页 | 国产精品欧美精品日韩精品 | 国产日韩欧美 | 国产精品视频一区二区三区 | 夜夜操操操| 国产精品国产精品 | 国产欧美视频一区二区三区 | 成人性视频免费网站 | 久久精品国产久精国产 | 国产丝袜一区二区三区免费视频 | 日韩精品 电影一区 亚洲 |