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

你可能感兴趣的:(redis,消息队列,ICE,icestorm,订阅发布)