大佬教程收集整理的这篇文章主要介绍了php中Redis的应用--消息传递,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
消息传递这一应用广泛存在于各个网站中,这个功能也是一个网站必不可少的。常见的消息传递应用有,新浪微博中的@我呀、给你评论然后的提示呀、赞赞赞提示、私信呀、甚至是发微博分享的新鲜事;知乎中的私信呀、live发送过来的消息、知乎团队消息呀等等。
消息传递即两个或者多个客户端在相互发送和接收消息。
在这里我们,我们进一步将消息传递再细分为一对一的消息传递,多对多的消息传递(群组消息传递)。
【注:两个类的代码相对较多,因此将其折叠起来了】
模块要求:
1、提示有多少个联系人发来新消息
2、信息包含发送人、时间、信息内容
3、能够获取之前的旧消息
4、并且消息能够保持7天,过期将会被动触发删除
1、新消息与旧消息分别采用两个链表来存储
2、原始消息的结构采用数组的形式存放,并且含有发送人、时间戳、信息内容
3、在推入redis的链表前,需要将数据转换为json类型然后再进行存储
4、在取出新信息时应该使用rpoplpush来实现,将已读的新消息推入旧消息链表中
5、取出旧消息时,应该用旧消息的时间与现在的时间进行对比,若超时,则直接删除后面的全部数据(因为数据是按时间一个一个压进链表中的,所以对于时间是有序排列的)
数据存储结构图:
#SinglePullMessage.class.PHP
PHP;"> 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,-1); #一次性将全部旧消息取出来 foreach ($json_pre as $k => $v) { $temp=json_decode($v); #json反编码 $timeout=$temp->time+60*60*24*7; #数据过期时间 七天过期 if($timeout
以上是大佬教程为你收集整理的php中Redis的应用--消息传递全部内容,希望文章能够帮你解决php中Redis的应用--消息传递所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。