Redisのランキング管理API作りました

PHP

概要

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

コメント

まとめ

redis-ranking作りました。

コメント