AnyEvent-RipeRedis

 view release on metacpan or  search on metacpan

examples/subs.pl  view on Meta::CPAN

);

# Subscribe to channels by pattern
$redis->psubscribe( @patterns,
  { on_reply => sub {
      my $reply = shift;
      my $err   = shift;

      if ( defined $err ) {
        warn $err->message . "\n";
        return;
      };

      print 'Subscribed on: ' . join( ', ', @patterns ). "\n";
    },

    on_message => sub {
      my $message = shift;
      my $pattern = shift;
      my $channel = shift;

      print "$pattern ($channel): $message\n";
    },
  }
);

# Unsubscribe
my $on_signal = sub {
  print "Stopped\n";

  $redis->unsubscribe( @channels,
    sub {
      my $msg = shift;
      my $err = shift;

      if ( defined $err ) {
        warn $err->message . "\n";
        return;
      };

      print 'Unsubscribed from: ' . join( ', ', @channels ). "\n";
    }
  );

  $redis->punsubscribe( @patterns,
    sub {
      my $msg = shift;
      my $err = shift;

      if ( defined $err ) {
        warn $err->message . "\n";
        return;
      };

      print 'Unsubscribed from: ' . join( ', ', @patterns ). "\n";

      $cv->send;
    }
  );

  my $timer;
  $timer = AE::timer( 5, 0,
    sub {
      undef( $timer );
      exit 0; # Emergency exit
    },
  );
};

my $int_w  = AE::signal( INT  => $on_signal );
my $term_w = AE::signal( TERM => $on_signal );

$cv->recv;

$redis->disconnect;



( run in 2.792 seconds using v1.01-cache-2.11-cpan-02777c243ea )