Debuginfo

思考とアウトプット

Perl でRedisを操作してみた ~ シリアライズは自前で? ~

前回のエントリーでインストールしました。 Redisモジュールを使って操作してみようと思います。

perldoc Redisには例がないですが、githubのテストを読めばなんとなくわかるはずです。

基本的にこれを見ながらコードを書けばできるのですが、配列/ハッシュの中身の扱い方でつまずきました。。

配列/ハッシュの中身をストアする

Memcachedだとリファレンスは中身をちゃんと入れてくれます。

use Cache::Memcached::Fast;
.... 
$memd->set(‘array’, \@array);

Redisで同じことをやると文字列ARRAYが入ってしまうようです。

use Redis;
...
my @hoge = qw/a b c d/;
$v = $redis->set(‘hoge’, \@hoge);
# $v == ARRAY(0x1cb3710)

Redis listを使う場合は一つずつ入れる。

$redis->rpush(‘hoge’ => "$_") foreach (@hoge);

Memcachedのようにシリアライズして入れるのではなくRedis listは配列変数のように使うようです。そもそもシリアライズするときは自前で行えば良いのですね。例えば、JSONでシリアライズするなら、

my @hoge = qw/a b c d/;
my $text = encode_json \@hoge;
$redis->set('hoge' => $text);
my $v = $redis->get(‘hoge');
my $array_ref = decode_json $v;
print Dumper $array_ref;

間違ってたらコメントくださいm(__)m