首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 其他教程 > 开源软件 >

redis的订阅公布服务 api简单易用 性能好于icestorm

2012-07-03 
redis的订阅发布服务api简单易用性能好于icestormicestorm的订阅发布服务在我们公司使用了好几年了,使用的

redis的订阅发布服务 api简单易用 性能好于icestorm

icestorm的订阅发布服务在我们公司使用了好几年了,使用的也非常稳定成熟了.

?

?

今天在本地的服务器上分别对redis的订阅发布服务 和 icestorm进行了压力测试.

redis的订阅发布服务性能比icestorm要高一些.

这次的压力测试主要分为两大块,"消息的接收能力" 和 ?"接收到消息后的分发能力"

?

测试的单条消息数据为20个字节

?

接收能力:

? ? redis ? ? ? ? ? ?15000次/秒

? ? icestorm: ? ? ? ?10000次/秒

?

分发能力:

? ? 订阅者个数 ? redis ? ? ? ? icestorm

? ? 3 ? ? ? ? ? ?5000次/秒 ? ? ?3000次/秒

? ? 6 ? ? ? ? ? ?5000次/秒 ? ? ?2900次/秒

? ? 9 ? ? ? ? ? ?5000次/秒 ? ? ?2900次/秒

?

?

不过redis没提供集群的功能,而icestorm支持集群.

?

api介绍:

?

消息发布端:

? ? php:

? ? ? ? <?php

? ? ? ? ? ? $redis = new Redis();

? ? ? ? ? ? //连接redis server

? ? ? ? ? ? $redis->connect('192.168.0.235',6379);

? ? ? ? ? ? //第一个参数是你发送消息的channel,有的地方叫做topic,就像对讲机有不同的频率和频道

? ? ? ? ? ? //第二个参数是你对这个channel发送消息的具体内容 只能是string类型的

? ? ? ? ? ? $redis->publish('channel','i am publishing message');

? ? ? ? ?>

?

? ? python:

? ? ? ? import redis

? ? ? ? #连接redis server

? ? ? ? REDIS_CONN = ?redis.Redis(host='192.168.0.235',port=6379)

? ? ? ? #第一个参数是你发送消息的channel,有的地方叫做topic,就像对讲机有不同的频率和频道

? ? ? ? #第二个参数是你对这个channel发送消息的具体内容 只能是string类型的

? ? ? ? REDIS_CONN.publish('channel_1', 'i am publishing message')

?

?

消息订阅端:

? ? python:

?

? ? ? ? import redis

?

? ? ? ? #连接redis

? ? ? ? redis_conn = redis.Redis(host='192.168.0.235',port=6379)

? ? ? ? #实例化一个 pubsub 对象

? ? ? ? pubsub_ins = redis_conn.pubsub()

? ? ? ? #订阅你关心的channel

? ? ? ? #

? ? ? ? # api中提供了一种批量订阅的方法

? ? ? ? # pattern为 "ESUN*" 则表示订阅所有ESUN开头的channel

? ? ? ? # pubsub_ins.psubscribe(pattern);

? ? ? ? #

? ? ? ? pubsub_ins.subscribe('channel_1')

? ? ? ? #listen 开始收听该channel的消息 加上这句以后 redis server就会将你订阅的channel的消息发送过来了

? ? ? ? #它将消息存储在 listen2 ?listen2是一个 yield?

? ? ? ? listen2 = ?pubsub_ins.listen()

? ? ? ? while 1:

? ? ? ? ? ? #next操作就会将yield中的消息一条一条的取出来了 ?没有消息会一直阻塞

? ? ? ? ? ? msg = listen2.next()

? ? ? ? ? ? print msg

热点排行