binghai03 发表于 2016-12-20 10:07:21

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
页: [1]
查看完整版本: redis的订阅发布服务 api简单易用 性能好于icestorm