无法订阅Mojo :: Redis2

时间:2015-02-20 22:15:51

标签: perl redis mojolicious

我编写了以下程序(redis.pl),Redis使用默认端口设置在本地运行,但当我使用redis.pl运行morbo redis.pl时,我从未获得********* 1屏幕。这是为什么?似乎订阅从未发生过。我该如何解决这个问题?

#!/usr/bin/perl

use v5.18;
use warnings;

use Mojolicious::Lite;
use Mojo::Redis2;

say "Welcome";

my $redis = Mojo::Redis2->new();

$redis->subscribe(['pubsub'] => sub {
    say "********* 1";
});

get '/' => sub {
    my $self = shift;

    $self->render(json => {a => 1});
};

app->start;

2 个答案:

答案 0 :(得分:2)

我目前没有安装redis实例,但我认为这应该可行。

#!/usr/bin/perl

use v5.18;
use warnings;

use Mojolicious::Lite;
use Mojo::Redis2;

say "Welcome";

helper redis => sub {state $redis = Mojo::Redis2->new()};

app->redis->subscribe(['pubsub'] => sub {
    say "********* 1";
});

get '/' => sub {
    my $self = shift;

    $self->render(json => {a => 1});
};

app->start;

我怀疑一旦redis实例超出范围,就会丢失它及其连接。

答案 1 :(得分:0)

我解决了这个问题,确保将$redis->subscribe的返回值保留在永久变量中,如下所示:

而不是......

$redis->subscribe(['pubsub'] => sub {
    say "********* 1";
});

......我写了......

our $subscription = $redis->subscribe(['pubsub'] => sub {
    say "********* 1";
});

解决了这个问题。我猜它与AnyEvent类似,返回值必须保持活跃状态​​。