概要
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