The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/env perl
use strict;
use warnings;
use utf8;

use Benchmark qw(:all);

use Cache::Memcached::Fast;
use Cache::Redis;
use File::Spec;
use File::Temp qw/tempdir/;
use Test::Memcached;
use Test::RedisServer;

my $tempdir = tempdir(CLEANUP => 1);
my $mem_sock = File::Spec->catfile($tempdir, 'mem.sock');
my $memd  = Test::Memcached->new(
    options => {
        unix_socket => $mem_sock,
    },
);
$memd->start;
my $memd_client = Cache::Memcached::Fast->new({
    servers => [$mem_sock],
});
my $redis = Test::RedisServer->new;
my $redis_client = Cache::Redis->new(
    $redis->connect_info,
    nowait => 1,
);
my $redis_client_fast = Cache::Redis->new(
    $redis->connect_info,
    redis_class => 'Redis::Fast',
    nowait => 1,
);

my $results = timethese(0, {
    'memd'  => sub {
        $memd_client->set('hoge', 'fuga');
        $memd_client->get('hoge');
        $memd_client->remove('hoge');
    },
    'redis' => sub {
        $redis_client->set('hoge', 'fuga');
        $redis_client->get('hoge');
        $redis_client->remove('hoge');
    },
    'redis_fast' => sub {
        $redis_client_fast->set('hoge', 'fuga');
        $redis_client_fast->get('hoge');
        $redis_client_fast->remove('hoge');
    },
});
cmpthese( $results ) ;