\r\n\r\n

redisとphpのクイックデータストレージをはじめよう

オープンソースのデータストレージ・エンジンであるredisを使用して、オンライン・ソフトウェアを高速化する方法について説明し、毎秒3200万クエリの高速化を可能にします。

人気の高いRedisストレージエンジンは、ソフトウェア開発者なら必ず持っている優れたツールです。インメモリーストレージエンジンにより、最大で毎秒3,200万回のクエリという極めて高速なデータの保存と検索が可能となり、主要なデータベースエンジンに追加されることになったのです。

オンライン業務を加速させるための方法を、さっそく学んでみましょう。

redis: 表と裏

Redisの素晴らしいところは、純粋なインメモリデータストアであることです。つまり、データベースがRAMに保存されているため、ハードディスクへのファイルI/O操作が不要で、非常に高速に動作するのです。

また、Redisクラスタによるクラスタリングをサポートし、さらに8種類のデータタイプをサポートしているため、必要なデータを柔軟に保存・管理することができるという利点もあります。

しかし、最大の欠点は、純粋にインメモリデータストアであるため、サイズに制限があることでもある。これはサーバーのインフラに依存しますが、この記事と単純化のために、典型的なRedisデータベースは最大2~4GBのデータしか保持できません。

つまり、RedisはmySQL、PostgreSQL、MongoDBなどの一般的なデータベースエンジンを補完するために使われるものであり、それらを置き換えるものではありません。Redisの主な用途としては、キャッシュ、短期間で失効する一時データ/最新データ、頻繁にアクセスする小さなデータチャンクなどが挙げられます。

redis のインストール方法

Ubuntuまたはapt getコマンドを含むLinuxディストリビューションを使用していると仮定して、Redisをインストールするには、ターミナルで次のコマンドを実行するだけです。

sudo apt-get install redis-server

次に、Redisが正常にインストールされていることを確認します。ターミナルで、以下のコマンドを実行します。

redis-cli --version

これにより、実行中のRedisのバージョンが表示されますので、その場合は以下のコマンドを実行して、Redisに接続します。

redis-cli

これにより、ターミナルに以下のような非標準のRedisプロンプトが表示されます。

127.0.0.1:6379>

文字列コマンド

Redisの各エントリーはキーで識別され、キーは空白でない任意の文字列を指定することができます。文字列には1つの値しか含まれません。例えば、Redisプロンプトで以下のコマンドを実行し、複数のキーに値を設定します。

127.0.0.1:6379> set full_name "John Doe"127.0.0.1:6379> set units 5

これで、keysコマンドを使って、現在Redisデータベースにあるすべてのキーを一覧表示できるようになりました。

127.0.0.1:6379> keys *

この結果、以前に設定した2つのキー、フルネームと単位が表示されます。これらのキーの値を見るには、getコマンドを使用します。

127.0.0.1:6379> get full_name"John Doe"127.0.0.1:6379> get units5

キーはdelコマンドで簡単に削除することができます。

127.0.0.1:6379> del full_name

また、hincrbyコマンドを使うと、「units」キーを5から7に増やす以下のように、整数の数を素早く増やすことができます。

127.0.0.1:6379> incrby units 2

コマンドの一覧

Redisのリストは、特定の順序を持つ一次元配列であり、リスト内の異なる位置にあるアイテムの重複を許容します。リストの左側または右側に項目を追加するには、lpushとrpushコマンドを使用します。

127.0.0.1:6379> lpush colors blue127.0.0.1:6379> rpush colors red yellow green

上の例からわかるように、1つのコマンドで複数の項目をリストにプッシュすることができます。これで、lrangeコマンドを使えば、リスト内のすべての項目を見ることができるようになりました。

127.0.0.1:6379> lrange colors 0 -1

コマンドの最後には2つの整数があり、最初の整数は開始するリストの位置を定義し、2番目の整数は返すべき項目の数で、-1はすべての項目を意味します。上記のコマンドの結果は、青、赤、黄、緑の4色になります。

また、lpop、rpopコマンドを使用すると、リストの両端から項目を削除することができます。

127.0.0.1:6379> lpop colorsblue127.0.0.1:6379> rpop colorsgreen

また、llenコマンドでリストの要素数を取得することができます。

127.0.0.1:6379> llen colors(integer) 2

最後に、lremコマンドでリストから要素を削除することができます。

127.0.0.1:6379> lrem colors 1 green(integer) 1

lremコマンドは、リストの名前から始まり、削除する出現回数と削除する要素の名前が続きます。見つかったオカレンスとリストから削除されたオカレンスの数が返されます。

ハッシュコマンド

Redisで最も人気のあるデータ型の1つがハッシュで、1つのエントリに複数のキーと値のペアを格納することができます。キーは存在する必要はなく、hsetコマンドでいつでもキーと値のペアを定義することができます。

127.0.0.1:6379> hset user:581 full_name "Jane Doe"127.0.0.1:6379> hset user:581 points 500

hmsetコマンドを使えば、1つのコマンドでハッシュの複数のKey-Valueペアを定義することも可能です。

127.0.0.1:6379> hmset user:581 email [email protected] gender F

Hash user identified by key: now 581 合計4つのキーと値のペアがあり、いずれもhgetallコマンドで簡単に取得することができます。

127.0.0.1:6379> hgetall user:5811) "full_name"2) "Jane Doe"3) "points"4) "500"5) "email"6) "[email protected]"7) "gender"8) "F"

getコマンドは、ハッシュ内の1つのキーと値のペアの値を取得するためにも使用できる。

127.0.0.1:6379> hget user:581 email"[email protected]"

ハッシュ内の任意の整数に対して、code hincrbyコマンドで指定量だけインクリメントすることができる。

127.0.0.1:6379> hincrby user:581 points 20(integer) 520

ハッシュ内のポイントキーの値が20増えて520になりました。ハッシュ内の個々のキーと値のペアは、hdelコマンドで削除できます。

127.0.0.1:6379> hdel user:581 gender

また、すべてのKey-Valueペアを含むハッシュは、delコマンドで削除することができます。

127.0.0.1:6379> del user:581

期限切れのredisキー

Redisのもう一つの優れた機能は、expireコマンドを使用して定義された秒数後にキーを自動的に失効させることができることです。なお、失効できるのは完全なキーだけで、リストやハッシュの個々の要素は失効できない。例

127.0.0.1:6379> expire full_name 10

これにより、「文字列」セクションで作成したフルネームキーの有効期限が10秒に設定されます。上記のコマンドを実行した後、10秒待ってから、もう一度キーの値を取得してみてください。

127.0.0.1:6379> get full_name(nil)

予想通り、キーは有効期限が切れているので、結果としてnullが得られます。

phpでredisに接続する

Redisを使ってデータを保存・取得する方法の基本を理解したところで、いよいよソフトウェアと接続します。すべてのプログラミング言語には、Redis用のモジュール/拡張機能がありますが、この例ではPHPを使用します。

PHPのRedis拡張はデフォルトではインストールされていないので、まずインストールする必要があります。ターミナルでコマンドを実行します。

sudo apt-get install php-redis

インストールしたら、PHP fpm を再起動し、拡張機能が正しく読み込まれるようにしてください。以下は、Redisに接続し、RedisとインターフェースするためのPHPコードです。

<?php// Connect to redis$conn = new redis();try { $conn->connect('127.0.0.1', 6379, 5);} catch (RedisException $e) { die("Unable to connect to redis");}// Set string$conn->set('country', 'Canada');// Get string$value = $conn->get('country');echo "Country is: $value";// Define a profile$profile = [ 'username' => 'mike', 'full_name' => 'Mike Smith', 'email' => '[email protected]', 'country' => 'Australia'];// Create a hash$conn->hmset('user:188', $profile);// Get all values of the profile hash$values = $conn->hgetall('user:188');print_r($values);// Get only the e-mail address$email = $conn->hget('user:188', 'email');echo "E-mail is: $email";// Expire the hash in 15 seconds$conn->expire('user:188', 15);

上記のコード例は、非常にわかりやすいはずです。まず5秒間のタイムアウトでRedisに接続し、文字列とハッシュのセットアップとフェッチを行います。すべてのRedisコマンドは、上図のようにRedisオブジェクトから直接OOPコールを介して実行することができます。

出番だ!

これで、Redis ストレージエンジンを使ってデータを高速に保存、取得する方法の基本を学びました。また、PHP を使って Redis に接続し、操作する方法も学びました。

この記事は基本的なことしか書いていないので、Redisとその機能についての理解を深めるには、ドキュメントのRedisデータ型のページが適していることに注意してください。

  • 2021-03-28 11:57 に公開
  • 閲覧 ( 29 )
  • 分類:IT

あなたが興味を持っているかもしれない記事

匿名者
匿名者

0 件の投稿

作家リスト

  1. admin 0 投稿
  2. 匿名者 0 投稿

おすすめ