redis的brpop简单使用
来源:互联网 发布:做微信小视频的软件 编辑:程序博客网 时间:2024/06/06 03:06
redis作为消息队列,已经在许多互联网公司推广开了,相比memcacheq更加丰富的数据结构和功能当然是它备受青睐的主要原因。redis的安装不用赘述,安装完毕后有redis-server和redis-cli两个工具可用,一个服务器端一个客户端。然后接着安装php的扩展。
我在网上找了几个php的扩展,安装使用都不是很方便,没有做具体功能与性能的比较,就随便找了个用C实现的扩展来试试吧
git clone https://github.com/owlient/phpredis.git
cd phpredis
phpize
./configure & make & make install
编辑php.ini添加对redis.so的扩展支持(这个链接下面有扩展包和测试用例),我们来运行几组测试吧:
<?php $r = new Redis(); $r->connect("127.0.0.1", 6379); $r->set("key1","ciaos"); $r->set("key2","penjin"); $res = $r->mget(array("key1","key2")); var_dump($res);/*array(2) { [0]=> string(5) "ciaos" [1]=> string(6) "penjin"}*/?>我看这个扩展对redis的命令支持得都不错,可惜项目不是很活跃,不过基本的功能都和官方命令一样的。我们就来测试一下brpop的效果吧,首先模拟一个消息的“生产者”
<?php $r = new Redis(); $r->connect("127.0.0.1", 6379); $r->lpush("msg","Hello ciaos"); $r->lpush("msg","Hello penjin");?>然后模拟一个消息的消费者,而redis-server则充当中间的消息队列(我这里当然用的是redis的list类型)
<?php $r = new Redis(); $r->connect("127.0.0.1", 6379); $res = $r->brpop("msg",0); var_dump($res);?>很简单,brpop的意思是在消息队列尾阻塞地取出消息,参数0表示一直阻塞下去直到有消息在msg这个list中,我们可以指定一个数字代表过期时间。首先运行消费者,可以看到程序阻塞了,然后运行“生产者”,则消费者输出了消息如下:
[root@fedora lib]# php consumer.php array(2) { [0]=> string(3) "msg" [1]=> string(11) "Hello ciaos"}lpush操作和brpop操作也保证了队列的先进先出,如果用blpop则会看到输出的是"Hello penjin"(第二条消息)。
其中brpop还可以指定监测多个消息队列,直到有任意一个消息队列中有待处理消息时阻塞返回,感觉还是比较简单易用的。redis的list消息队列没有优先级的概念,所有消息都只能先进先出或者后进先出,要实现优先级,可以考虑使用set数据结构。
下面整理一些网上说到的redis的应用场景:
- 作为缓存使用,提供比memcached更加丰富的数据结构和功能
- 使用list可以构造队列系统(如上面的简单的消息队列),使用sorted set可以构造带优先级的队列系统
- 计数器应用,redis的操作都是原子性的,不必担心memcache中操作数据存在的不一致的隐患
- 排行榜应用,tag消息系统等
- redis的brpop简单使用
- redis brpop
- redis hiredis brpop
- Redis实战系列(5) phpredis的brpop问题
- Redis实战系列(5) phpredis的brpop问题
- php redis brpop提示异常
- Redis BRPOP key [key ...] timeout
- redis的简单使用
- Redis的简单使用
- redis的简单使用
- redis的简单使用
- redis 的简单使用
- 4.redis的简单使用
- redis的安装和简单的使用
- redis客户端jedis的简单使用
- 内存数据库redis的简单使用
- Redis的安装和简单使用
- Java使用redis的简单demo
- 八皇后问题
- Linux - Find string in files.
- 深入浅出MFC学习笔记(第8章:Document----View深入探讨)
- discuz如何把登录框移到最顶的菜单栏,只显示一个登录和注册按钮?
- Struts2分页例子
- redis的brpop简单使用
- json传输图片 等二进制数据
- 指针之美
- .NET设计模式(1): 简单工厂模式
- ISDB-T/SBTVD-T Closed Caption
- .NET设计模式(2): 工厂方法模式
- .NET设计模式(3): 抽象工厂模式
- Xcode 4 中使用静态库
- SQL交叉表实例