日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > 数据库 >内容正文

数据库

Redis应用----消息传递

發(fā)布時(shí)間:2025/5/22 数据库 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Redis应用----消息传递 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1、摘要

  消息傳遞這一應(yīng)用廣泛存在于各個(gè)網(wǎng)站中,這個(gè)功能也是一個(gè)網(wǎng)站必不可少的。常見(jiàn)的消息傳遞應(yīng)用有,新浪微博中的@我呀、給你評(píng)論然后的提示呀、贊贊贊提示、私信呀、甚至是發(fā)微博分享的新鮮事;知乎中的私信呀、live發(fā)送過(guò)來(lái)的消息、知乎團(tuán)隊(duì)消息呀等等。

?

2、實(shí)現(xiàn)方法

  消息傳遞即兩個(gè)或者多個(gè)客戶(hù)端在相互發(fā)送和接收消息。

  通常有兩種方法實(shí)現(xiàn):

  第一種為消息推送。Redis內(nèi)置有這種機(jī)制,publish往頻道推送消息、subscribe訂閱頻道。這種方法有一個(gè)缺點(diǎn)就是必須保證接收者時(shí)刻在線(xiàn)(即是此時(shí)程序不能停下來(lái),一直保持監(jiān)控狀態(tài),假若斷線(xiàn)后就會(huì)出現(xiàn)客戶(hù)端丟失信息)

  第二種為消息拉取。所謂消息拉取,就是客戶(hù)端自主去獲取存儲(chǔ)在服務(wù)器中的數(shù)據(jù)。Redis內(nèi)部沒(méi)有實(shí)現(xiàn)消息拉取這種機(jī)制。因此我們需要自己手動(dòng)編寫(xiě)代碼去實(shí)現(xiàn)這個(gè)功能。

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

【注:兩個(gè)類(lèi)的代碼相對(duì)較多,因此將其折疊起來(lái)了】

?

3、一對(duì)一消息傳遞

  例子1:一對(duì)一消息發(fā)送與獲取

  模塊要求:

  1、提示有多少個(gè)聯(lián)系人發(fā)來(lái)新消息

  2、信息包含發(fā)送人、時(shí)間、信息內(nèi)容

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

  4、并且消息能夠保持7天,過(guò)期將會(huì)被動(dòng)觸發(fā)刪除

  Redis實(shí)現(xiàn)思路:

  1、新消息與舊消息分別采用兩個(gè)鏈表來(lái)存儲(chǔ)

  2、原始消息的結(jié)構(gòu)采用數(shù)組的形式存放,并且含有發(fā)送人、時(shí)間戳、信息內(nèi)容

  3、在推入redis的鏈表前,需要將數(shù)據(jù)轉(zhuǎn)換為json類(lèi)型然后再進(jìn)行存儲(chǔ)

  4、在取出新信息時(shí)應(yīng)該使用rpoplpush來(lái)實(shí)現(xiàn),將已讀的新消息推入舊消息鏈表中

  5、取出舊消息時(shí),應(yīng)該用舊消息的時(shí)間與現(xiàn)在的時(shí)間進(jìn)行對(duì)比,若超時(shí),則直接刪除后面的全部數(shù)據(jù)(因?yàn)閿?shù)據(jù)是按時(shí)間一個(gè)一個(gè)壓進(jìn)鏈表中的,所以對(duì)于時(shí)間是有序排列的)

數(shù)據(jù)存儲(chǔ)結(jié)構(gòu)圖:

?

PHP的實(shí)現(xiàn)代碼:

#SinglePullMessage.class.php

1 <?php 2 #單接接收者接收消息 3 class SinglePullMessage 4 { 5 private $redis=''; #存儲(chǔ)redis對(duì)象 6 /** 7 * @desc 構(gòu)造函數(shù) 8 * 9 * @param $host string | redis主機(jī) 10 * @param $port int | 端口 11 */ 12 public function __construct($host,$port=6379) 13 { 14 $this->redis=new Redis(); 15 $this->redis->connect($host,$port); 16 } 17 18 /** 19 * @desc 發(fā)送消息(一個(gè)人) 20 * 21 * @param $toUser string | 接收人 22 * @param $messageArr array | 發(fā)送的消息數(shù)組,包含sender、message、time 23 * 24 * @return bool 25 */ 26 public function sendSingle($toUser,$messageArr) 27 { 28 $json_message=json_encode($messageArr); #編碼成json數(shù)據(jù) 29 return $this->redis->lpush($toUser,$json_message); #將數(shù)據(jù)推入鏈表 30 } 31 32 /** 33 * @desc 用戶(hù)獲取新消息 34 * 35 * @param $user string | 用戶(hù)名 36 * 37 * @return array 返回?cái)?shù)組,包含多少個(gè)用戶(hù)發(fā)來(lái)新消息,以及具體消息 38 */ 39 public function getNewMessage($user) 40 { 41 #接收新信息數(shù)據(jù),并且將數(shù)據(jù)推入舊信息數(shù)據(jù)鏈表中,并且在原鏈表中刪除 42 $messageArr=array(); 43 while($json_message=$this->redis->rpoplpush($user, 'preMessage_'.$user)) 44 { 45 $temp=json_decode($json_message); #將json數(shù)據(jù)變成對(duì)象 46 $messageArr[$temp->sender][]=$temp; #轉(zhuǎn)換成數(shù)組信息 47 } 48 if($messageArr) 49 { 50 $arr['count']=count($messageArr); #統(tǒng)計(jì)有多少個(gè)用戶(hù)發(fā)來(lái)信息 51 $arr['messageArr']=$messageArr; 52 return $arr; 53 } 54 return false; 55 } 56 57 public function getPreMessage($user) 58 { 59 ##取出舊消息 60 $messageArr=array(); 61 $json_pre=$this->redis->lrange('preMessage_'.$user, 0, -1); #一次性將全部舊消息取出來(lái) 62 foreach ($json_pre as $k => $v) 63 { 64 $temp=json_decode($v); #json反編碼 65 $timeout=$temp->time+60*60*24*7; #數(shù)據(jù)過(guò)期時(shí)間 七天過(guò)期 66 if($timeout<time()) #判斷數(shù)據(jù)是否過(guò)期 67 { 68 if($k==0) #若是最遲插入的數(shù)據(jù)都過(guò)期了,則將所有數(shù)據(jù)刪除 69 { 70 $this->redis->del('preMessage_'.$user); 71 break; 72 } 73 $this->redis->ltrim('preMessage_'.$user, 0, $k); #若檢測(cè)出有過(guò)期的,則將比它之前插入的所有數(shù)據(jù)刪除 74 break; 75 } 76 $messageArr[$temp->sender][]=$temp; 77 } 78 return $messageArr; 79 } 80 81 /** 82 * @desc 消息處理,沒(méi)什么特別的作用。在這里這是用來(lái)處理數(shù)組信息,然后將其輸出。 83 * 84 * @param $arr array | 需要處理的信息數(shù)組 85 * 86 * @return 返回打印輸出 87 */ 88 public function dealArr($arr) 89 { 90 foreach ($arr as $k => $v) 91 { 92 foreach ($v as $k1 => $v2) 93 { 94 echo '發(fā)送人:'.$v2->sender.' 發(fā)送時(shí)間:'.date('Y-m-d h:i:s',$v2->time).'<br/>'; 95 echo '消息內(nèi)容:'.$v2->message.'<br/>'; 96 } 97 echo "<hr/>"; 98 } 99 } 100 101 102 } View Code

?

?測(cè)試:

  1、發(fā)送消息

  #建立test1.php

1 include './SinglePullMessage.class.php'; 2 $object=new SinglePullMessage('192.168.95.11'); 3 #發(fā)送消息 4 $sender='boss'; #發(fā)送者 5 $to='jane'; #接收者 6 $message='How are you'; #信息 7 $time=time(); 8 $arr=array('sender'=>$sender,'message'=>$message,'time'=>$time); 9 echo $object->sendSingle($to,$arr);

?

  2、獲取新消息

  #建立test2.php

1 include './SinglePullMessage.class.php'; 2 $object=new SinglePullMessage('192.168.95.11'); 3 #獲取新消息 4 $arr=$object->getNewMessage('jane'); 5 if($arr) 6 { 7 echo $arr['count']."個(gè)聯(lián)系人發(fā)來(lái)新消息<br/><hr/>"; 8 $object->dealArr($arr['messageArr']); 9 } 10 else 11 echo "無(wú)新消息";

?

?  訪(fǎng)問(wèn)結(jié)果:

  3、獲取舊消息

  #建立test3.php

1 include './SinglePullMessage.class.php'; 2 $object=new SinglePullMessage('192.168.95.11'); 3 #獲取舊消息 4 $arr=$object->getPreMessage('jane'); 5 if($arr) 6 { 7 $object->dealArr($arr); 8 } 9 else 10 echo "無(wú)舊數(shù)據(jù)";

?

?

?

4、多對(duì)多消息傳遞

  例子2:多對(duì)多消息發(fā)送與獲取(即是群組)

  模塊要求:

  1、用戶(hù)能夠自行創(chuàng)建群組,并成為群主

  2、群主可以拉人進(jìn)來(lái)作為群組成員、并且可以踢人

  3、用戶(hù)可以直接退出群組

  4、可以發(fā)送消息,每一位成員都可以拉取消息

  5、群組的消息最大容納量為5000條

  6、成員可以拉取新消息,并提示有多少新消息

  7、成員可以分頁(yè)獲取之前已讀的舊消息

  。。。。。功能就寫(xiě)這幾個(gè)吧,有需要或者想練習(xí)的同學(xué)們可以增加其他功能,例如禁言、匿名消息發(fā)送、文件發(fā)送等等。

  Redis實(shí)現(xiàn)思路:

   1、群組的消息以及群組的成員組成采用有序集合進(jìn)行存儲(chǔ)。群組消息有序集合的member存儲(chǔ)用戶(hù)發(fā)送的json數(shù)據(jù)消息,score存儲(chǔ)唯一值,將采用原子操作incr獲取string中的自增長(zhǎng)值進(jìn)行存儲(chǔ);群組成員有序集合的member存儲(chǔ)user,score存儲(chǔ)非零數(shù)字(在這里這個(gè)score意義不大,我的例子代碼中使用數(shù)字1為群主的score,其他的存儲(chǔ)為2。當(dāng)然這使用這個(gè)數(shù)據(jù)還可以擴(kuò)展別的功能,例如群組中成員等級(jí))可參考下面數(shù)據(jù)存儲(chǔ)結(jié)構(gòu)簡(jiǎn)圖。

  2、用戶(hù)所加入的群組也是采用有序集合進(jìn)行存儲(chǔ)。其中,member存儲(chǔ)群組ID,score存儲(chǔ)用戶(hù)已經(jīng)獲取該群組的最大消息分值(對(duì)應(yīng)群組消息的score值)

  3、用戶(hù)創(chuàng)建群組的時(shí)候,通過(guò)原子操作incr從而獲取一個(gè)唯一ID

  4、用戶(hù)在群中發(fā)送消息時(shí),也是通過(guò)原子操作incr獲取一個(gè)唯一自增長(zhǎng)有序ID

  5、在執(zhí)行incr時(shí),為防止并發(fā)導(dǎo)致競(jìng)爭(zhēng)關(guān)系,因此需要進(jìn)行加鎖操作【redis詳細(xì)鎖的講解可以參考:Redis構(gòu)建分布式鎖http://www.cnblogs.com/phpstudy2015-6/p/6575775.html】

  6、創(chuàng)建群組方法簡(jiǎn)要思路,任何一個(gè)用戶(hù)都可以創(chuàng)建群組聊天,在創(chuàng)建的同時(shí),可以選擇時(shí)是否添加群組成員(參數(shù)通過(guò)數(shù)組的形式)。創(chuàng)建過(guò)程將會(huì)為這個(gè)群組建立一個(gè)群組成員有序集合(群組信息有序集合暫時(shí)不創(chuàng)建),接著將群主添加進(jìn)去,再將群ID添加用戶(hù)所參加的群組有序集合中。

數(shù)據(jù)存儲(chǔ)結(jié)構(gòu)圖:

?

PHP的代碼實(shí)現(xiàn):

#ManyPullMessage.class.php

1 <?php 2 class ManyPullMessage 3 { 4 private $redis=''; #存儲(chǔ)redis對(duì)象 5 /** 6 * @desc 構(gòu)造函數(shù) 7 * 8 * @param $host string | redis主機(jī) 9 * @param $port int | 端口 10 */ 11 public function __construct($host,$port=6379) 12 { 13 $this->redis=new Redis(); 14 $this->redis->connect($host,$port); 15 } 16 17 /** 18 * @desc 用于創(chuàng)建群組的方法,在創(chuàng)建的同時(shí)還可以拉人進(jìn)群組 19 * 20 * @param $user string | 用戶(hù)名,創(chuàng)建群組的主人 21 * @param $addUser array | 其他用戶(hù)構(gòu)成的數(shù)組 22 * 23 * @param $lockName string | 鎖的名字,用于獲取群組ID的時(shí)候用 24 * @return int 返回群組ID 25 */ 26 public function createGroupChat($user, $addUser=array(), $lockName='chatIdLock') 27 { 28 $identifier=$this->getLock($lockName); #獲取鎖 29 if($identifier) 30 { 31 $id=$this->redis->incr('groupChatID'); #獲取群組ID 32 $this->releaseLock($lockName,$identifier); #釋放鎖 33 } 34 else 35 return false; 36 $messageCount=$this->redis->set('countMessage_'.$id, 0); #初始化這個(gè)群組消息計(jì)數(shù)器 37 #開(kāi)啟非事務(wù)型流水線(xiàn),一次性將所有redis命令傳給redis,減少與redis的連接 38 $pipe=$this->redis->pipeline(); 39 $this->redis->zadd('groupChat_'.$id, 1, $user); #創(chuàng)建群組成員有序集合,并添加群主 40 #將這個(gè)群組添加到user所參加的群組有序集合中 41 $this->redis->zadd('hasGroupChat_'.$user, 0, $id); 42 foreach ($addUser as $v) #創(chuàng)建群組的同時(shí)需要添加的用戶(hù)成員 43 { 44 $this->redis->zadd('groupChat_'.$id, 2, $v); 45 $this->redis->zadd('hasGroupChat_'.$v, 0, $id); 46 } 47 $pipe->exec(); 48 return $id; #返回群組ID 49 } 50 51 /** 52 * @desc 群主主動(dòng)拉人進(jìn)群 53 * 54 * @param $user string | 群主名 55 * @param $groupChatID int | 群組ID 56 * @param $addMembers array | 需要拉進(jìn)群的用戶(hù) 57 * 58 * @return bool 59 */ 60 public function addMembers($user, $groupChatID, $addMembers=array()) 61 { 62 $groupMasterScore=$this->redis->zscore('groupChat_'.$groupChatID, $user); #將groupChatName的群主取出來(lái) 63 if($groupMasterScore==1) #判斷user是否是群主 64 { 65 $pipe=$this->redis->pipeline(); #開(kāi)啟非事務(wù)流水線(xiàn) 66 foreach ($addMembers as $v) 67 { 68 $this->redis->zadd('groupChat_'.$groupChatID, 2, $v); #添加進(jìn)群 69 $this->redis->zadd('hasGroupChat_'.$v, 0, $groupChatID); #添加群名到用戶(hù)的有序集合中 70 } 71 $pipe->exec(); 72 return true; 73 } 74 return false; 75 } 76 77 /** 78 * @desc 群主刪除成員 79 * 80 * @param $user string | 群主名 81 * @param $groupChatID int | 群組ID 82 * @param $delMembers array | 需要?jiǎng)h除的成員名字 83 * 84 * @return bool 85 */ 86 public function delMembers($user, $groupChatID, $delMembers=array()) 87 { 88 $groupMasterScore=$this->redis->zscore('groupChat_'.$groupChatID, $user); 89 if($groupMasterScore==1) #判斷user是否是群主 90 { 91 $pipe=$this->redis->pipeline(); #開(kāi)啟非事務(wù)流水線(xiàn) 92 foreach ($delMembers as $v) 93 { 94 $this->redis->zrem('groupChat_'.$groupChatID, $v); 95 $this->redis->zrem('hasGroupChat_'.$v, $groupChatID); 96 } 97 $pipe->exec(); 98 return true; 99 } 100 return false; 101 } 102 103 /** 104 * @desc 退出群組 105 * 106 * @param $user string | 用戶(hù)名 107 * @param $groupChatID int | 群組名 108 */ 109 public function quitGroupChat($user, $groupChatID) 110 { 111 $this->redis->zrem('groupChat_'.$groupChatID, $user); 112 $this->redis->zrem('hasGroupChat_'.$user, $groupChatID); 113 return true; 114 } 115 116 /** 117 * @desc 發(fā)送消息 118 * 119 * @param $user string | 用戶(hù)名 120 * @param $groupChatID int | 群組ID 121 * @param $messageArr array | 包含發(fā)送消息的數(shù)組 122 * @param $preLockName string | 群消息鎖前綴,群消息鎖全名為countLock_群ID 123 * 124 * @return bool 125 */ 126 public function sendMessage($user, $groupChatID, $messageArr, $preLockName='countLock_') 127 { 128 $memberScore=$this->redis->zscore('groupChat_'.$groupChatID, $user); #成員score 129 if($memberScore) 130 { 131 $identifier=$this->getLock($preLockName.$groupChatID); #獲取鎖 132 if($identifier) #判斷獲取鎖是否成功 133 { 134 $messageCount=$this->redis->incr('countMessage_'.$groupChatID); 135 $this->releaseLock($preLockName.$groupChatID,$identifier); #釋放鎖 136 } 137 else 138 return false; 139 $json_message=json_encode($messageArr); 140 $this->redis->zadd('groupChatMessage_'.$groupChatID, $messageCount, $json_message); 141 $count=$this->redis->zcard('groupChatMessage_'.$groupChatID); #查看信息量大小 142 if($count>5000) #判斷數(shù)據(jù)量有沒(méi)有達(dá)到5000條 143 { #數(shù)據(jù)量超5000,則需要清除舊數(shù)據(jù) 144 $start=5000-$count; 145 $this->redis->zremrangebyrank('groupChatMessage_'.$groupChatID, $start, $count); 146 } 147 return true; 148 } 149 return false; 150 } 151 152 /** 153 * @desc 獲取新信息 154 * 155 * @param $user string | 用戶(hù)名 156 * 157 * @return 成功則放回json數(shù)據(jù)數(shù)組,無(wú)新信息返回false 158 */ 159 public function getNewMessage($user) 160 { 161 $arrID=$this->redis->zrange('hasGroupChat_'.$user, 0, -1, 'withscores'); #獲取用戶(hù)擁有的群組ID 162 $json_message=array(); #初始化 163 foreach ($arrID as $k => $v) #遍歷循環(huán)所有群組,查看是否有新消息 164 { 165 $messageCount=$this->redis->get('countMessage_'.$k); #群組最大信息分值數(shù) 166 if($messageCount>$v) #判斷用戶(hù)是否存在未讀新消息 167 { 168 $json_message[$k]['message']=$this->redis->zrangebyscore('groupChatMessage_'.$k, $v+1, $messageCount); 169 $json_message[$k]['count']=count($json_message[$k]['message']); #統(tǒng)計(jì)新消息數(shù)量 170 $this->redis->zadd('hasGroupChat_'.$user, $messageCount, $k); #更新已獲取消息 171 } 172 } 173 if($json_message) 174 return $json_message; 175 return false; 176 } 177 178 /** 179 * @desc 分頁(yè)獲取群組信息 180 * 181 * @param $user string | 用戶(hù)名 182 * @param $groupChatID int | 群組ID 183 * @param $page int | 第幾頁(yè) 184 * @param $size int | 每頁(yè)多少條數(shù)據(jù) 185 * 186 * @return 成功返回json數(shù)據(jù),失敗返回false 187 */ 188 public function getPartMessage($user, $groupChatID, $page=1, $size=10) 189 { 190 $start=$page*$size-$size; #開(kāi)始截取數(shù)據(jù)位置 191 $stop=$page*$size-1; #結(jié)束截取數(shù)據(jù)位置 192 $json_message=$this->redis->zrevrange('groupChatMessage_'.$groupChatID, $start, $stop); 193 if($json_message) 194 return $json_message; 195 return false; 196 } 197 198 199 /** 200 * @desc 加鎖方法 201 * 202 * @param $lockName string | 鎖的名字 203 * @param $timeout int | 鎖的過(guò)期時(shí)間 204 * 205 * @return 成功返回identifier/失敗返回false 206 */ 207 public function getLock($lockName, $timeout=2) 208 { 209 $identifier=uniqid(); #獲取唯一標(biāo)識(shí)符 210 $timeout=ceil($timeout); #確保是整數(shù) 211 $end=time()+$timeout; 212 while(time()<$end) #循環(huán)獲取鎖 213 { 214 /* 215 #這里的set操作可以等同于下面那個(gè)if操作,并且可以減少一次與redis通訊 216 if($this->redis->set($lockName, $identifier array('nx', 'ex'=>$timeout))) 217 return $identifier; 218 */ 219 if($this->redis->setnx($lockName, $identifier)) #查看$lockName是否被上鎖 220 { 221 $this->redis->expire($lockName, $timeout); #為$lockName設(shè)置過(guò)期時(shí)間 222 return $identifier; #返回一維標(biāo)識(shí)符 223 } 224 elseif ($this->redis->ttl($lockName)===-1) 225 { 226 $this->redis->expire($lockName, $timeout); #檢測(cè)是否有設(shè)置過(guò)期時(shí)間,沒(méi)有則加上 227 } 228 usleep(0.001); #停止0.001ms 229 } 230 return false; 231 } 232 233 /** 234 * @desc 釋放鎖 235 * 236 * @param $lockName string | 鎖名 237 * @param $identifier string | 鎖的唯一值 238 * 239 * @param bool 240 */ 241 public function releaseLock($lockName,$identifier) 242 { 243 if($this->redis->get($lockName)==$identifier) #判斷是鎖有沒(méi)有被其他客戶(hù)端修改 244 { 245 $this->redis->multi(); 246 $this->redis->del($lockName); #釋放鎖 247 $this->redis->exec(); 248 return true; 249 } 250 else 251 { 252 return false; #其他客戶(hù)端修改了鎖,不能刪除別人的鎖 253 } 254 } 255 256 257 } 258 259 ?> View Code

?

測(cè)試:

  1、建立createGroupChat.php(測(cè)試創(chuàng)建群組功能)

  執(zhí)行代碼并創(chuàng)建568、569群組(群主為jack)

1 include './ManyPullMessage.class.php'; 2 $object=new ManyPullMessage('192.168.95.11'); 3 #創(chuàng)建群組 4 $user='jack'; 5 $arr=array('jane1','jane2'); 6 $a=$object->createGroupChat($user,$arr); 7 echo "<pre>"; 8 print_r($a); 9 echo "</pre>";die;

?

?

?

  2、建立addMembers.php(測(cè)試添加成員功能)

  執(zhí)行代碼并添加新成員

1 include './ManyPullMessage.class.php'; 2 $object=new ManyPullMessage('192.168.95.11'); 3 $b=$object->addMembers('jack','568',array('jane1','jane2','jane3','jane4')); 4 echo "<pre>"; 5 print_r($b); 6 echo "</pre>";die;

  3、建立delete.php(測(cè)試群主刪除成員功能)

1 include './ManyPullMessage.class.php'; 2 $object=new ManyPullMessage('192.168.95.11'); 3 #群主刪除成員 4 $c=$object->delMembers('jack', '568', array('jane1','jane4')); 5 echo "<pre>"; 6 print_r($c); 7 echo "</pre>";die;

  4、建立sendMessage.php(測(cè)試發(fā)送消息功能)

  多執(zhí)行幾遍,568、569都發(fā)幾條

1 include './ManyPullMessage.class.php'; 2 $object=new ManyPullMessage('192.168.95.11'); 3 #發(fā)送消息 4 $user='jane2'; 5 $message='go go go'; 6 $groupChatID=568; 7 $arr=array('sender'=>$user, 'message'=>$message, 'time'=>time()); 8 $d=$object->sendMessage($user,$groupChatID,$arr); 9 echo "<pre>"; 10 print_r($d); 11 echo "</pre>";die;

?

  5、建立getNewMessage.php(測(cè)試用戶(hù)獲取新消息功能)

1 include './ManyPullMessage.class.php'; 2 $object=new ManyPullMessage('192.168.95.11'); 3 #用戶(hù)獲取新消息 4 $e=$object->getNewMessage('jane2'); 5 echo "<pre>"; 6 print_r($e); 7 echo "</pre>";die;

?

  6、建立getPartMessage.php(測(cè)試用戶(hù)獲取某個(gè)群組部分消息)

  (多發(fā)送幾條消息,用于測(cè)試。568中共18條數(shù)據(jù))

1 include './ManyPullMessage.class.php'; 2 $object=new ManyPullMessage('192.168.95.11'); 3 #用戶(hù)獲取某個(gè)群組部分消息 4 $f=$object->getPartMessage('jane2', 568, 1, 10); 5 echo "<pre>"; 6 print_r($f); 7 echo "</pre>";die;

?

page=1,size=10

page=2,size=10

測(cè)試完畢,還需要?jiǎng)e的功能可以自己進(jìn)行修改添加測(cè)試。

這次整理這篇文章相對(duì)比較趕,心里已經(jīng)想著快點(diǎn)整理完趕緊學(xué)習(xí)其他的技術(shù)啦,哈哈22333。各位大神請(qǐng)留步,懇請(qǐng)各位給點(diǎn)學(xué)習(xí)redis的指導(dǎo)意見(jiàn),本人職業(yè)方向是PHP

?

(以上是自己的一些見(jiàn)解,若有不足或者錯(cuò)誤的地方請(qǐng)各位指出)

作者:那一葉隨風(fēng)

?聲明:本博客文章為原創(chuàng),只代表本人在工作學(xué)習(xí)中某一時(shí)間內(nèi)總結(jié)的觀點(diǎn)或結(jié)論。轉(zhuǎn)載時(shí)請(qǐng)?jiān)谖恼马?yè)面明顯位置給出原文鏈接

?

轉(zhuǎn)載于:https://www.cnblogs.com/phpstudy2015-6/p/6629000.html

總結(jié)

以上是生活随笔為你收集整理的Redis应用----消息传递的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 亚洲精品国产免费 | 欧美日韩精品一区二区三区蜜桃 | 女教师三上悠亚ssni-152 | 日本人体一区 | 神宫寺奈绪一区二区三区 | 96亚洲精品久久久蜜桃 | 欧美人与动性xxxxx杂性 | 日本少妇videos高潮 | 91视频色| 国产午夜福利一区二区 | 亚洲福利国产 | 国产香蕉久久 | av影院在线播放 | 99久久国产热无码精品免费 | a天堂资源 | 美女131爽爽爽 | 91精品免费在线观看 | av一区二区三 | 成人自拍视频在线观看 | 少妇天堂网 | 日韩逼 | 国产日韩一区二区三免费高清 | 久久神马影院 | 国产美女黄色 | 欧美成人黄色片 | 91官网入口| 国产伦精品一区二区三区88av | av永久免费观看 | www日本com | 中国性xxx| 欧美成人视 | 婷婷久久精品 | 公侵犯人妻一区二区三区 | 九九热这里有精品视频 | 深夜视频在线看 | 在线看免费av | 伊人亚洲综合 | 欧美成人综合网站 | 色吊丝中文字幕 | 91成人免费在线 | 欧洲久久久久久 | 黄色网战入口 | 国产又色又爽无遮挡免费动态图 | 亚洲久操 | 国产视频在线观看视频 | 日本综合久久 | 天天色天天综合 | 日韩网站视频 | 国产日韩中文字幕 | 国内精久久久久久久久久人 | 国产精品999 | 女生高潮视频在线观看 | 视频福利在线 | 久久中文字幕在线 | 亚洲第一av网 | missav在线 | 91中文字幕在线观看 | 都市激情亚洲 | 国产精品老熟女视频一区二区 | 美女写真福利视频 | 麻豆传媒在线看 | 精品一区二区无码 | 日韩综合网 | 久久精品国产亚洲av香蕉 | 香蕉视频在线观看网站 | 国产一区二区小视频 | 操极品| 色窝网 | 又色又爽又黄无遮挡的免费视频 | 国产精品二区三区 | 久久亚洲AV无码专区成人国产 | 天天曰天天 | 神马伦理影视 | 欧美美女啪啪 | 欧美日韩一区三区 | 视频在线观看 | 嫩草视频在线免费观看 | 91这里只有精品 | 国产伦精品一区二区三区视频黑人 | 私人av | 国产福利精品在线观看 | 国产精品久久久久久人妻精品动漫 | ass亚洲肉体欣赏pics | 国产一区二区内射 | 日韩精品一区二区三区不卡 | 大陆极品少妇内射aaaaaa | 色偷偷中文字幕 | 久久人人爽人人人人片 | 九九热在线免费视频 | 超碰人人干 | 两性视频久久 | 四虎影院黄色 | 免费在线观看亚洲 | 欧美久久久久久又粗又大 | 国产高清在线精品 | 国产xx在线观看 | 久久精品av | 亚洲free性xxxx护士白浆 | 91毛片观看 |