Perl から Redis に接続するための Redis ライブラリを試してみた。
redis-server のインストール
Ubuntu だったので以下のようにして入れたものを使った。
% sudo apt-get install redis-server
% redis-server -v
Redis server v=2.8.4 sha=00000000:0 malloc=jemalloc-3.4.1 bits=64 build=a44a05d76f06a5d9
% sudo service redis-server status
redis-server is running
Redis モジュールのインストール
% cpanm Redis
% perl -MRedis -le 'print $Redis::VERSION'
1.981
Perl から接続する
まずは普通に使ってみる。
大抵の他の言語のライブラリと同じく Redis のコマンド と同名のメソッドが実装されている。
use strict;
use warnings;
use utf8;
use Redis;
my $redis = Redis->new(server => 'localhost:6379');
$redis->set('foo', 100);
$redis->set('bar', "Str");
print $redis->get('foo'), "\n";
#=> 100
print $redis->get('bar'), "\n";
#=> Str
Hash に tie して使う
Redis::Hash を使うことで Hash に tie する事ができる。
これにより通常の Hash にアクセスするのと同じコードで Redis 上にデータを保存できる。
use strict;
use warnings;
use utf8;
use Data::Dumper;
use Redis;
use Redis::Hash;
tie(my %hash, 'Redis::Hash', undef, (server => 'localhost:6379'));
$hash{apple} = 100;
$hash{banana} = 150;
$hash{melon} = 500;
print Dumper(\%hash);
# Redis に保存されていることを確認
my $redis = Redis->new(server => 'localhost:6379');
print Dumper($redis->keys('*'));
配列に tie して使う
同様にして Redis::List を使う事で配列に tie する事もできる。
use strict;
use warnings;
use utf8;
use Data::Dumper;
use Redis;
use Redis::List;
tie(my @list, 'Redis::List', 'languages', (server => 'localhost:6379'));
# 値の追加。 rpush が使われる
push(@list, 'Perl');
push(@list, 'Ruby');
push(@list, 'Scala');
print Dumper(\@list);
# 値の入れ替え。 lset が使われる
$list[2] = 'Haskell';
print Dumper(\@list);
# Redis に保存されていることを確認
my $redis = Redis->new(server => 'localhost:6379');
print Dumper($redis->lrange('languages', 0, -1));
参考
Perl の Redis ライブラリを調べた - Shogo's Blog
http://shogo82148.github.io/blog/2013/08/24/perl-redis-libraries/