【メモ】Redisについて

Redisについての雑多なメモです。

特徴

Redis is an open source (BSD licensed), in-memory data structure store, used as a database, cache and message broker.

Redis

  • Key-Valueストレージで、NoSQLに分類される
  • そういう文脈上キャッシュというよりはデータストレージ
  • 最大の特徴は構造を持つデータ(リストやオブジェクト)をそのまま保存できること
  • パフォーマンスはmemcachedremarkably similarらしい
  • データは定期的にディスクに保存されるためサーバが落ちてもデータが残るし、再起動時にはロードされる
  • データのサイズに制限はないが、全体サイズがメモリ容量に収まる必要がある、あるいは削除の設定をする必要がある

導入

// ダウンロード
$ wget http://download.redis.io/redis-stable.tar.gz
$ tar xzf redis-stable.tar.gz
$ cd redis-stable
// ビルド
$ make

// 起動
$ src/redis-server

PHPでの利用方法

PHPでRedisを利用する際は、以下の2つがメジャー。

どちらのクライアントも基本的にRedisのコマンド名と同じメソッドが定義されているので利用法に大きな差異はないが導入方法が異なる。また、phpredisはextensionなのでpredisよりも高速で動作することが予想される。

predis

ライブラリなのでcomposer経由でインストール。

{
    "require": {
        "predis/predis": "^1.1.1"
    }
}

アプリケーション側からは以下のように利用する。

<?php
require __DIR__ . '/../vendor/autoload.php';

use Predis\Client as PredisClient;

try {
  $redis = new PredisClient();
} catch (Exception $e) {
  die($e->getMessage());
}

// 値の設定
$redis->set('message', 'Hello world');
// 値の取得
$value = $redis->get('message');

print($value); // Hello world

phpredis

こちらはextensionとなっているので、

ダウンロード & ビルド → php.iniにモジュールの登録

の手順を踏む必要がある。

  • ダウンロード & ビルド
$ git clone git://github.com/nicolasff/phpredis.git
$ cd phpredis
$ phpize // エクステンションを追加する際に,phpを最初からコンパイルし直す必要なく,追加するためのコマンド(*)
$ ./configure
$ make && make install

(*) Redisの使い方

  • モジュールの登録

ビルドされたredis.soというファイルをphpのextensionが入っているディレクトリにコピーし、php.iniに登録する。

$ cp modules/redis.so {php-config–extension-dir}
$ sudo echo “extension=redis.so”  > /etc/php5/conf.d/redis.ini

アプリケーション側からは以下のように利用する。

<?php
$redis = new Redis(); // extensionとして登録しているからロードせず使える
$redis->connect('127.0.0.1',6379);

$redis->set('dog', 'bow-bow');
$res = $redis->get('dog');
echo $res . PHP_EOL;

$redis->close();

気になる点

  • 導入するタイミングはいつなのか
  • 結局memcachedとどっちがいいのか
    • データ構造が保存できるとはいえmemcachedシリアライズの方法、共通の実装が揃えば使い勝手は一緒な気がする。

参考