概要
RedisのSort SetのAPIが若干使いづらいので、ソーシャルゲームでのユースケースに即したAPIでラップしました。
https://github.com/matsubo/redis-ranking
インストール
Composer対応してあります。
composer.jsonに以下を書いて、php composer.phar update
してください。
{ "require": { "redis/ranking": "1.0.*" }
サンプルコード
<?php require __DIR__ . '/../vendor/autoload.php'; use Matsubo\Redis\Ranking; $redis = new \Redis(); $redis->connect('127.0.0.1', 6379); $ranking = new Ranking($key = 'usecase', $redis); // Add score $ranking->setUserScore('kanako', 1); $ranking->setUserScore('ayaka', 50); $ranking->setUserScore('shiori', 100); // get score var_dump($ranking->getScore('kanako')); // float(1) var_dump($ranking->getScore('ayaka')); // float(50) var_dump($ranking->getScore('shiori')); // float(100) // get rank var_dump($ranking->getRank('kanako')); // int(0) var_dump($ranking->getRank('ayaka')); // int(1) var_dump($ranking->getRank('shiori')); // int(2) /* * Show top 2 * array(3) { * ["kanako"]=> * string(1) "1"; * ["ayaka"]=> * string(2) "50" */ var_dump($ranking->getRange(0, 1, true)); // Cleanup $redis->del($key);
ベンチマーク
redis-benchmark
コマンドではSorted Keyのベンチマークが出てこないので、ベンチマーク取ってみました。
Redis自体のベンチマークはこちらに細かくまとまっている。http://redis.io/topics/benchmarks
- PHP 5.3.15 + Redis 2.6.12
- Core i7 2.3GHz
% php sample/benchmark.php Add: 18,350 queries/s Update: 17,876 queries/s Get score: 21,361 queries/s Get rank: 22,123 queries/s php sample/benchmark.php 1.50s user 2.96s system 43% cpu 10.203 total
サンプルアプリケーション
サンプルアプリケーション:AKB勝手に総選挙を作ってみました。
- ほぼ生のPHPで書いています。更新時にはHTTPリクエストが約10msで返ってきます(有線LAN -> AP -> 無線LAN 環境)。
- bowerとcomposerで構築しているので実質1ファイルだけ書きました
- ソースコード:https://github.com/matsubo/redis-ranking-sample
コメント
- アイドルマスター ミリオンライブ!のイベントランキングがリアルタイムじゃないのが残念なので、これを使って対応していただけるとうれしいです。
- ソートの順番はAscendingで固定のようなので、Descendingにしたければ、不等号を逆にすれば良いです。
- 同点の扱いに関して:http://blog.nekokak.org/show?guid=iIz4tOKF4hG-rirtGCByNQ
まとめ
redis-ranking作りました。
Comments