読者です 読者をやめる 読者になる 読者になる

DRY

Web関連の技術の事、食事/お酒の事、旅行の事など

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);



どうやらうまく入ったっぽい。