385 文字
2 分
Redisのランキング管理API作りました
概要
RedisのSort SetのAPIが若干使いづらいので、ソーシャルゲームでのユースケースに即したAPIでラップしました。
https://github.com/matsubo/redis-ranking

インストール
Composer対応してあります。
composer.jsonに以下を書いて、php composer.phar updateしてください。
{ "require": { "redis/ranking": "1.0.*" }}サンプルコード
<?phprequire __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 scorevar_dump($ranking->getScore('kanako')); // float(1)var_dump($ranking->getScore('ayaka')); // float(50)var_dump($ranking->getScore('shiori')); // float(100)
// get rankvar_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.phpAdd: 18,350 queries/sUpdate: 17,876 queries/sGet score: 21,361 queries/sGet rank: 22,123 queries/sphp 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作りました。
Redisのランキング管理API作りました
https://blog.teraren.com/posts/redis-ranking-api/