Redisの活用例
Redisの基本的な機能を見たところで,
セッションストアやキャッシュ
Redisはデータを一時的に保存するのに適しているので,
ただし,
ネストしたハッシュや配列のような複雑なデータをRedisに保存したい場合は,
my $redis = Redis::Fast->new;
my $cache = Cache::Redis->new(
redis => $redis
);
$cache->set('key' => {hoge => 1});
print $cache->get('key')->{hoge};
また,
リアルタイムランキング
ソート済みセット型は順位の計算を高速に行えるので,
ただし,
ランキングの目的によっては,
my $redis = Redis::Fast->new;
my $lb = Redis::LeaderBoard->new(
redis => $redis,
key => 'leader_board:1',
order => 'asc', # asc/desc
);
$lb->set_score(one => 100);
$lb->set_score(two => 50);
my ($rank, $score) =
$lb->get_rank_with_score('one');
場合によっては,
排他制御
cronを使ってジョブを実行する場合などに,setlock
コマンドがよく使われますが,
次のようなコマンドで,program
を排他的に実行できます。
$ redis-setlock KEY program
ライブラリとして利用することもできます。
my $redis = Redis::Fast->new;
my $g = Redis::Setlock->lock_guard($redis,'key');
if ($g) {
# ロック獲得成功
}
else {
# ロック獲得失敗
}
Redisのテスト
実際のサービスでRedisを活用するのであれば,
開発用にRedisサーバを準備してもよいのですが,
use Redis::Fast;
use Test::RedisServer;
use Test::More;
# テスト用のRedisサーバを立ち上げる
my $redis_server = Test::RedisServer->new;
# テスト用のRedisサーバに接続する
my $redis = Redis::Fast->new(
$redis_server->connect_info
);
# Redisを使ったテスト
is $redis->ping, 'PONG', 'ping pong ok';
done_testing;
Redisのキーを便利に使うユーティリティ
Redisは便利なKVSですが,
Redis::Namespace──キー名への接頭辞付与を自動化する
Redisではキー名に接頭辞を付けて,
接頭辞を付ける作業を毎回手動で行っていると,
Redis::NamespaceはRedis::Fastとインタフェースの互換性があるので,
my $redis = Redis::Fast->new;
my $ns = Redis::Namespace->new(
redis => $redis,
namespace => 'ns',
);
# $redis->set('ns:key', 'value');
$ns->set('key' => 'value');
# $redis->get('ns:key');
print $ns->get('key');
Redis::Namespaceのインタフェース互換性を応用すると,
Redis::Key──Redisのキーのラッパモジュール
「user:ユーザーID」
Redis::KeyはRedisのキーのラッパモジュールです。プレースホルダを使ってsprintf
を用いたり,
# キー名のルールを決める
my $redis = Redis->new;
my $user = Redis::Key->new(
redis => $redis,
key => 'user:{id}',
need_bind => 1,
);
# キー名にIDを埋め込む
my $key = $user->bind(id => 123);
# $redis->set('user:123', 'value');
$key->set('value');
# $redis->get('user:123');
$key->get;