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