The Perl and Raku Conference 2025: Greenville, South Carolina - June 27-29 Learn more

use strict;
test_redis {
my $r = shift;
$r->all_cv->begin(sub { $_[0]->send });
my $info = $r->info->recv;
is ref $info, 'HASH';
ok $info->{redis_version};
$r->set("foo", "bar", sub { pass "SET foo" });
$r->get("foo", sub { is $_[0], "bar" });
$r->lpush("list", "bar");
$r->lpush("list", "baz");
is $r->lpop("list")->recv, 'baz';
is $r->lpop("list")->recv, 'bar';
$r->set("prefix.bar", "test", sub { $r->get("prefix.bar", sub { is $_[0], "test" }) });
$r->set("prefix.baz", "test");
$r->mget(
"prefix.bar",
"prefix.baz",
"foo",
sub {
my $res = shift;
is $res->[0], "test";
is $res->[2], "bar";
}
);
$r->mget(
1, 2, 3,
sub {
my $res = shift;
map { ok !$_ } @$res;
}
);
$r->mget(
1,
"prefix.baz",
"barbaz",
sub {
my $res = shift;
ok !$res->[0];
is $res->[1], "test";
ok !$res->[2];
}
);
if ($info->{redis_version} =~ /^2/) {
$r->hset("hash", "foo", "bar", sub { is $_[0], 1 });
$r->hset("hash", "baz", "foo");
$r->hget("hash", "foo", sub { is $_[0], "bar" });
$r->hmget("hash", "foo", "baz",
sub { my $res = shift; is $res->[0], "bar"; is $res->[1], "foo" });
$r->hdel("hash", "foo", sub { is $_[0], 1 });
$r->hmset("hash", "foo", 1, "bar", 2, "baz", 3,
sub { my $res = shift; ok $res });
$r->hincrby("hash", "foo", 2, sub { my $res = shift; is $res, 3 });
$r->hkeys("hash", sub {my $res = shift; is scalar @$res, 3;});
$r->hvals("hash", sub {my $res = shift; is scalar @$res, 3;});
$r->hgetall("hash", sub {my $res = shift; is scalar @$res, 6;});
for (qw/foo bar baz/) {
$r->hdel("hash", $_);
}
}
$r->keys('prefix.*', sub { my $keys = shift; is ref $keys, 'ARRAY'; is @$keys, 2 });
my $cv = $r->get("nonx");
is $cv->recv, undef;
my $err;
$r->{on_error} = sub { $err = shift };
$r->bogus("foo", sub { });
$r->all_cv->end;
$r->all_cv->recv;
like $err, qr/ERR unknown command/;
};
done_testing;