TokyoTyrant試してみた
色んなkey-valueストアを試しているので、まずはTTから。
TTのインストール方法は色んなサイトにあるので割愛。
TTはデータをserializeしてくれなかったので、hashとか入れようとすると困った事に。。。
なのでJSONに変換して入れてしまう。
ラッパーモジュール
package MyTokyoTyrant;use strict;
use warnings;
use Carp;
use Carp::Heavy;
use JSON::Syck;
#
use TokyoTyrant;
#
use Data::Dumper;
our $rdb; # TokyoTyrantのインスタンス
#
sub new
{
my ($class) = @_;
my $self =
{
instance => $class->instance,
};
bless $self, $class;
}
#
sub instance
{
my $class = shift;
if (ref ($class) eq __PACKAGE__)
{
return $class->{instance};
}$rdb = undef;
$rdb = TokyoTyrant::RDB->new ();
$rdb->open ("localhost", 1978) or die "open error: ".$rdb->errmsg ($rdb->ecode ());
}
#
sub set
{
my ($class, $key, $value) = @_;
$rdb->put ($key, JSON::Syck::Dump ($value)) or Carp::confess ("put error: ".$rdb->errmsg ($rdb->ecode ()));
}
#
sub get
{
my ($class, $key) = @_;
my $value = $rdb->get ($key);
defined $value or Carp::confess ("get error: ".$rdb->errmsg ($rdb->ecode ()));
return JSON::Syck::Load ($value);
}
#
sub remove
{
my ($class, $key) = @_;
$rdb->delete ($key);
}
#
DESTROY
{
my ($class) = @_;
$rdb->close() or die "close error: ".$rdb->errmsg ($rdb->ecode ());
}
test.pl
#!/usr/bin/perl
use strict;
use warnings;
use Data::Dumper;use MyTokyoTyrant;
my $scalar1 = "a";
MyTokyoTyrant->set ("scalar1", $scalar1);
my $ret_scalar1 = MyTokyoTyrant->get ("scalar1");
my $scalar2 = 1;
MyTokyoTyrant->set ("scalar2", $scalar2);
my $ret_scalar2 = MyTokyoTyrant->get ("scalar2");my @array1 = ("tako", "ika", "saru");
MyTokyoTyrant->set ("array1", \@array1);
my $ret_array1 = MyTokyoTyrant->get ("array1");my %hash1 = ('perl' => '1', 'php' => '2', 'ruby' => '3');
MyTokyoTyrant->set ("hash1", \%hash1);
my $ret_hash1 = MyTokyoTyrant->get ("hash1");warn Dumper ($ret_scalar1);
warn Dumper ($ret_scalar2);
warn Dumper ($ret_array1);
warn Dumper ($ret_hash1);
どうやらうまく入ったっぽい。