无法让 Mojo::Redis2 订阅

Can't get Mojo::Redis2 to subscribe

我写了下面的程序(redis.pl),Redis 在本地 运行ning 使用默认端口设置,但是当我 运行 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;

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

而不是...

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

...我写...

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

这解决了问题。我猜它类似于 AnyEvent,其中 return 值必须保持有效。

我目前没有安装 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 实例超出范围,您就会失去它及其连接。