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.*"
}
}

サンプルコード#

<?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
Terminal window
% 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

コメント#

まとめ#

redis-ranking作りました。

Redisのランキング管理API作りました
https://blog.teraren.com/posts/redis-ranking-api/
作者
Yuki Matsukura
公開日
2013-04-28
ライセンス
CC BY-NC-SA 4.0

コメント