PHP基于Redis消息队列实现发布微博的方法

本文实例讲述了PHP基于Redis消息队列实现发布微博的方法。分享给大家供大家参考,具体如下:

phpRedisAdmin :github地址  图形化管理界面

git clone [url]https://github.com/ErikDubbelboer/phpRedisAdmin.git[/url]
cd phpRedisAdmin
git clone [url]https://github.com/nrk/predis.git[/url] vendor

首先安装上述的Redis图形化管理界面,能够方便的管理Redis数据

为了降低Mysql的并发数,先把用户的微博存在Redis中

假设用户发布的时候需要三个字段,uid(用户ID号),username(用户姓名),content('用户的评论')

比如用户传递以下信息

//此处需要安装phpredis
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
// 连接redis
$web_info= array(
'uid' => '123456',
'username' => '123',
'content' =>'123'
);
//将数组转成json来存储
$list = json_encode($web_info);
//lpush向KEY对应的头部添加一个字符串元素
$redis->lpush('weibo_lists',$list);
$redis->close();
///var_dump(json_encode($web_info));
var_dump($list);
?>

此处可以看到我们的redis已经有数据了

//创建一个PDO数据库链接 data.php
class qq{
 public function post($uid='',$username='',$content=''){
  try{
   $dsn = "mysql:host;dbname=localhost;dbname=test";
   $db = new PDO($dsn,'root','root');
   $db->exec("SET NAMES UTF8");
   $sql ="insert into test(uid,username,content)values('$uid','$username','$content')";
   $db->exec($sql);
  }catch(PDOException $e){
   $e->getMessage();
  }
 }
}
//处理redis数据库的数据 并把数据放到MYSQL数据库中
include "data.php";
$qq = new qq();
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
//返回的列表的大小。如果列表不存在或为空,该命令返回0。如果该键不是列表,该命令返回FALSE
if($redis -> lsize('weibo_lists')){
 //从LIST头部删除并返回删除数据
 $info = $redis->rPop('weibo_lists');
 $info = json_decode($info);
 $qq->post($info->uid,$info->username,$info->content);
}
$redis->close();
var_dump($info);
?>

我们能看到数据库已经有数据了

更多关于PHP相关内容感兴趣的读者可查看本站专题:《php+redis数据库程序设计技巧总结》、《PHP扩展开发教程》、《php+mysql数据库操作入门教程》、《php+mysqli数据库程序设计技巧总结》、《php面向对象程序设计入门教程》、《PHP网络编程技巧总结》及《php常见数据库操作技巧汇总》

希望本文所述对大家PHP程序设计有所帮助。

时间: 2017-05-01

phpredis提高消息队列的实时性方法(推荐)

数据库存贮都用list形式 要存2个队列 1个用作消息队列保存到数据 还有个 就是用来实时读取数据在redis $redis->lpush($queenkey, json_encode($array)); $redis->lpush($listkey, json_encode($array)); /*消息队列实例*/ public function insertinfo() { $infos = array('info1' => mt_rand(10,100), 'info2' =>

PHP队列用法实例

本文实例讲述了PHP队列用法.分享给大家供大家参考.具体分析如下: 什么是队列,是先进先出的线性表,在具体应用中通常用链表或者数组来实现,队列只允许在后端进行插入操作,在前端进行删除操作. 什么情况下会用了队列呢,并发请求又要保证事务的完整性的时候就会用到队列,当然不排除使用其它更好的方法,知道的不仿说说看. 队列还可以用于减轻数据库服务器压力,我们可以将不是即时数据放入到队列中,在数据库空闲的时候或者间隔一段时间后执行.比如访问计数器,没有必要即时的执行访问增加的Sql,在没有使用队列的时候s

PHP+memcache实现消息队列案例分享

memche消息队列的原理就是在key上做文章,用以做一个连续的数字加上前缀记录序列化以后消息或者日志.然后通过定时程序将内容落地到文件或者数据库. php实现消息队列的用处比如在做发送邮件时发送大量邮件很费时间的问题,那么可以采取队列.方便实现队列的轻量级队列服务器是:starling支持memcache协议的轻量级持久化服务器https://github.com/starling/starlingBeanstalkd轻量.高效,支持持久化,每秒可处理3000左右的队列http://kr.gi

PHP消息队列用法实例分析

本文实例讲述了PHP消息队列用法.分享给大家供大家参考,具体如下: 该消息队列用于linux下,进程通信 #根据路径和后缀创建一个id $key = ftok(__DIR__, 'R'); #获取队列中的消息 $q = msg_get_queue($key); #删除队列 msg_remove_queue($q); #获取队列的状态信息 $status = msg_stat_queue($q); print_r($status); echo "\n"; for($i=0;$i<1

php实现的双向队列类实例

本文实例讲述了php实现的双向队列类及其用法,对于PHP数据结构与算法的学习有不错的参考价值.分享给大家供大家参考.具体分析如下: (deque,全名double-ended queue)是一种具有队列和栈的性质的数据结构.双向队列中的元素可以从两端弹出,其限定插入和删除操作在表的两端进行. 在实际使用中,还可以有输出受限的双向队列(即一个端点允许插入和删除,另一个端点只允许插入的双向队列)和输入受限的双向队列(即一个端点允许插入和删除,另一个端点只允许删除的双向队列).而如果限定双向队列从某个

PHP实现的memcache环形队列类实例

本文实例讲述了PHP实现的memcache环形队列类.分享给大家供大家参考.具体如下: 这里介绍了PHP实现的memcache环形队列类.没咋学过数据结构,因为业务需要,所以只是硬着头皮模拟的! 参考PHP memcache 队列代码.为使队列随时可入可出,且不受int长度越界危险(单链采取Head自增的话不作处理有越界可能),所以索性改写成环形队列.可能还有BUG,忘见谅! <?php /** * PHP memcache 环形队列类 * 原作者 LKK/lianq.net * 修改 FoxH

PHP的Laravel框架中使用消息队列queue及异步队列的方法

queue配置 首先说明一下我之前的项目中如何使用queue的. 我们现在的项目都是用的symfony,老一点的项目用的symfony1.4,新一点的项目用的都是symfony2.symfony用起来整体感觉还是很爽的,尤其symfony2,整体上来讲使用了很多java里面框架的设计思想.但是他不支持queue.在symfony,我们使用queue也经历了几个过程.最开始使用张堰同学的httpsqs.这个简单使用,但是存在单点.毕竟我们的项目还是正式对外服务的,所以我们研究了Apache旗下的开

php Memcache 中实现消息队列

对于一个很大的消息队列,频繁进行进行大数据库的序列化 和 反序列化,有太耗费.下面是我用PHP 实现的一个消息队列,只需要在尾部插入一个数据,就操作尾部,不用操作整个消息队列进行读取,与操作.但是,这个消息队列不是线程安全的,我只是尽量的避免了冲突的可能性.如果消息不是非常的密集,比如几秒钟才一个,还是可以考虑这样使用的. 如果你要实现线程安全的,一个建议是通过文件进行锁定,然后进行操作.下面是代码: 复制代码 代码如下: class Memcache_Queue { private $memc

队列在编程中的实际应用(php)

一:队列的概念.数据结构 队列(Queue)是运算受到限制的一种线性表.只允许在表的一端进行插入,而在另一端进行删除元素的线性表.队尾(rear)是允许插入的一端.队头(front)是允许删除的一端.空队列是不含元素的空表. 假设有个队列Q=(a1,a2,-,an),则a1为队头元素,an为队尾元素.元素入队的次序为a1,a2,-,an,而出队的次序为a1,a2,-,an.可见队列的操作是按照先进先出的原则进行的. 其他详细的介绍请在网上搜索很多资料. 二:PHP的队列 在PHP中队列以数组的形

PHP使用数组实现队列

PHP中将数组当做一个栈,主要是使用array_push()和array_pop()两个系统函数来完成.入栈主要是利用array_push()函数向第一个参数的数组尾部添加一个或多个元素,然后返回新数组的长度,示例如下: 而PHP中,将数组当作是队列则主要是用array_push()和array_shift()实现. 复制代码 代码如下: <?php $zhan=array("WEB");//声明一个数组当做队列 array_push($zhan,"PHP")

PHP队列原理及基于队列的写文件案例

本文实例讲述了PHP队列原理及基于队列的写文件案例.分享给大家供大家参考,具体如下: 队列是一种线性表,按照先进先出的原则进行的: 入队: 出队: PHP实现队列:第一个元素作为队头,最后一个元素作为队尾 <?php /** * 队列就是这么简单 * * @link */ $array = array('PHP', 'JAVA'); array_push($array, 'PYTHON'); //入队列 array_shift($array); //出队列 什么是双端队列(或双向队列)Deque

PHP高级编程之消息队列原理与实现方法详解

本文实例讲述了PHP高级编程之消息队列原理与实现方法.分享给大家供大家参考,具体如下: 1. 什么是消息队列 消息队列(英语:Message queue)是一种进程间通信或同一进程的不同线程间的通信方式 2. 为什么使用消息队列 消息队列技术是分布式应用间交换信息的一种技术.消息队列可驻留在内存或磁盘上,队列存储消息直到它们被应用程序读出.通过消息队列,应用程序可独立地执行,它们不需要知道彼此的位置.或在继续执行前不需要等待接收程序接收此消息. 3. 什么场合使用消息队列 你首先需要弄清楚,消息

Laravel框架队列原理与用法分析

本文实例讲述了Laravel框架队列原理与用法.分享给大家供大家参考,具体如下: 最近有朋友有朋友问laravel队列的实现原理和经验,刚好用过所以整理了一下分享给大家. laravel队列配置参见:http://d.laravel-china.org/docs/5.1/queues 原理分析 创建分发任务方法 class TestController extends Controller { //其他方法 //发送消息 public function SendMessage(Request $

Redis 实现队列原理的实例详解

Redis 实现队列原理的实例详解 场景说明: ·用于处理比较耗时的请求,例如批量发送邮件,如果直接在网页触发执行发送,程序会出现超时 ·高并发场景,当某个时刻请求瞬间增加时,可以把请求写入到队列,后台在去处理这些请求 ·抢购场景,先入先出的模式 命令: rpush + blpop 或 lpush + brpop rpush : 往列表右侧推入数据 blpop : 客户端阻塞直到队列有值输出 简单队列: simple.php $stmt = $pdo->prepare('select id, c

JavaScript数据结构与算法之队列原理与用法实例详解

本文实例讲述了JavaScript数据结构与算法之队列原理与用法.分享给大家供大家参考,具体如下: 队列是一种列表,不同的是队列只能在队尾插入元素,在队首删除元素.队列用于存储按顺序排列的数据,先进先出,这点和栈不一样(后入先出).在栈中,最后入栈的元素反而被优先处理.我们现在可以把队列想象对我们去餐馆吃饭的情景,很多人排队吃饭,排在最前面的人先打饭.新来的人只能在后面排队.直到轮到他们为止. 一:对队列的操作 队列有2种主要的操作,向队尾中插入新元素enqueue()方法和删除队列中的队首的元

Java延迟队列原理与用法实例详解

本文实例讲述了Java延迟队列原理与用法.分享给大家供大家参考,具体如下: 延时队列,第一他是个队列,所以具有对列功能第二就是延时,这就是延时对列,功能也就是将任务放在该延时对列中,只有到了延时时刻才能从该延时对列中获取任务否则获取不到-- 应用场景比较多,比如延时1分钟发短信,延时1分钟再次执行等,下面先看看延时队列demo之后再看延时队列在项目中的使用: 简单的延时队列要有三部分:第一实现了Delayed接口的消息体.第二消费消息的消费者.第三存放消息的延时队列,那下面就来看看延时队列dem

Python queue队列原理与应用案例分析

本文实例讲述了Python queue队列原理与应用.分享给大家供大家参考,具体如下: 作用: 解耦:使程序直接实现松耦合,修改一个函数,不会有串联关系. 提高处理效率:FIFO = 现进先出,LIFO = 后入先出. 队列: 队列可以并发的派多个线程,对排列的线程处理,并切每个需要处理线程只需要将请求的数据放入队列容器的内存中,线程不需要等待,当排列完毕处理完数据后,线程在准时来取数据即可.请求数据的线程只与这个队列容器存在关系,处理数据的线程down掉不会影响到请求数据的线程,队列会派给其他

python队列原理及实现方法示例

本文实例讲述了python队列原理及实现方法.分享给大家供大家参考,具体如下: 队列(queue)是只允许在一端进行插入操作,而在另一端进行删除操作的线性表. 队列是一种先进先出的(First In First Out)的线性表,简称FIFO.允许插入的一端为队尾,允许删除的一端为队头.队列不允许在中间部位进行操作!假设队列是q=(a1,a2,--,an),那么a1就是队头元素,而an是队尾元素.这样我们就可以删除时,总是从a1开始,而插入时,总是在队列最后.这也比较符合我们通常生活中的习惯,排

python双端队列原理、实现与使用方法分析

本文实例讲述了python双端队列原理.实现与使用方法.分享给大家供大家参考,具体如下: 双端队列 双端队列(deque,全名double-ended queue),是一种具有队列和栈的性质的数据结构. 双端队列中的元素可以从两端弹出,其限定插入和删除操作在表的两端进行.双端队列可以在队列任意一端入队和出队. 操作 Deque() 创建一个空的双端队列 add_front(item) 从队头加入一个item元素 add_rear(item) 从队尾加入一个item元素 remove_front(

Java循环队列原理与用法详解

本文实例讲述了Java循环队列原理与用法.分享给大家供大家参考,具体如下: 在正式进行循环队列学习之前,我们先来看看在顺序队列中删除队首元素出现的问题 (1)设一个容量为capacity=8,size=5(a,b,c,d,e)的数组,左侧为队首.右侧为队尾. (2)出队一个元素后,需整体往前移动一位 #出队 #2整体前移一位 关于该种操作方式我们很容易得出时间复杂度为O(n). 这时我们就想可不可以在出队元素后,整体元素不往前移,而是在数组中记下队首front是谁,同时队尾tail指向在下一次元