Redis入門:インストールから基本コマンドと5つのデータ構造まで徹底解説

Redisとは?高速かつ柔?高速かつ柔軟なデータ構造サーバー
Redisはその高速性と柔軟性により、開発者にとって非常に強力なツールであり、多彩な用途に活用できます。しばしば「キーバリューストア」と呼ばれますが、実際には「データ構造サーバー」と表現する方が正確です。というのも、Redisは以下の5種類のデータ構造をサポートしているからです。
- 文字列(Strings)
- ハッシュ(Hashes)
- リスト(Lists)
- セット(Sets)
- ソート済みセット(Sorted Sets)
各データ構造には共通のコマンドが用意されているほか、特定のデータ構造専用のコマンドも存在します。
本記事では、Redisの基本的な使い方と各データ構造の概要を紹介します。ここで取り上げるのはごく基礎的なコマンドのみですが、執筆時点でRedisには160以上のコマンドが存在します。詳細については、公式ドキュメント redis.io/commands を参照してください。
Redisの起動
ObjectRocketが提供するRedisインスタンスを利用するか、ローカル環境にRedisをインストールしましょう。
ローカルにインストールする場合は、ソースコードをダウンロード・展開してコンパイルします。
$ wget https://download.redis.io/releases/redis-2.8.17.tar.gz
$ tar xzf redis-2.8.17.tar.gz
$ cd redis-2.8.17
$ makeローカルインスタンスを起動します。
$ src/redis-serverRedisへの接続
これで、内蔵クライアントを使ってRedisと対話できるようになりました。ObjectRocketのRedisインスタンスに接続する場合は、ホスト名・ポート・パスワードを指定してredis-cliを起動します。
$ redis-cli -h my-host -p 1234 -a mypasswordローカルインスタンスの場合、ホストはlocalhost、デフォルトポートは6379、パスワードはデフォルトでは設定されていません。
$ redis-cliGETとSET:基本のキーバリュー操作
最もシンプルなレベルでは、Redisはキーバリューストアとして捉えることができます。SET foo bar コマンドを実行すると、キーfooの値がbarに設定されます。起動したredis-cliから、次のコマンドを試してみましょう。
redis> SET foo bar
OK続いて、GETコマンドでfooの値を読み出します。
redis> GET foo
"bar"EXPIREとTTL:有効期限の管理
EXPIREコマンドを使うと、キーに有効期限を設定できます。TTLは、キーが失効するまでの残り秒数を返します。
redis> SET foo bar
OK
redis> EXPIRE foo 120
(integer) 1
redis> TTL foo
(integer) 113リスト(Lists)
Redisの際立った特徴のひとつは、キーの値として単なる値ではなく、データ構造そのものを格納できる点です。
リストを作成するにはLPUSHまたはRPUSHを使用します。リストがすでに存在する場合、LPUSHは指定した値をリストの先頭に追加し、RPUSHは末尾に追加します。
redis> LPUSH cities "San Francisco"
(integer) 1
redis> RPUSH cities "Austin"
(integer) 2
redis> LRANGE cities 0 -1
1. "San Francisco"
2. "Austin"
redis> SORT cities alpha
1. "Austin"
2. "San Francisco"
redis> LPOP cities
"San Francisco"
redis> LRANGE cities 0 -1
1. "Austin"SORTコマンドは、ALPHA引数を付けることでリストを辞書順に昇順ソートします。降順でソートしたい場合は、SORTコマンドにDESC引数を追加してください。
また、RPOPコマンドはリストの末尾から要素を取り出し、LPOPは先頭から要素を取り出します。
セット(Sets)
セットはリストに似ていますが、各要素が一度しか出現できない点が異なります。以下の例では、米国の州からなる小さなセットを作成します。SADDコマンドはアイテムをセットに追加しますが、すでに存在する場合は追加されません。アイテムが存在しなければ追加されて1が返り、すでに存在すれば0が返ります。SMEMBERSはセット内の全アイテムを返し、SCARDはセットの要素数を返します。SREMはセットからアイテムを削除します。
redis> SADD states "Vermont"
(integer) 1
redis> SMEMBERS states
1. "Vermont"
redis> SADD states "Texas"
(integer) 1
redis> SCARD states
(integer) 2
redis> SADD states "Vermont"
(integer) 0
redis> SMEMBERS states
1. "Vermont"
2. "Texas"
redis> SADD states "California"
(integer) 1
redis> SMEMBERS states
1. "Vermont"
2. "Texas"
3. "California"
redis> SREM states "California"
(integer) 1
redis> SMEMBERS states
1. "Vermont"
2. "Texas"ハッシュ(Hashes)
ハッシュを使うと、各キー内のフィールドに対して文字列値を割り当ててマッピングできます。少数のフィールドを持つハッシュは非常に省スペースで格納されるため、小さなRedisインスタンスに数百万規模のオブジェクトを保存することも可能です。以下の例では、HSETコマンドでuser:1のnameフィールドに「john racker」を設定しています。HGETコマンドは指定フィールドの値を取得し、HGETALLは指定キーに関連するすべてのフィールドと値を返します。
redis> HSET user:1 name "john racker"
(integer) 1
redis> HGET user:1 name
"john racker"
redis> HSET user:1 company "objectrocket"
(integer) 1
redis> HGET user:1 company
"objectrocket"
redis> HSET user:1 city "austin"
(integer) 1
redis> HGET user:1 city
"austin"
redis> HGETALL user:1
1. "name"
2. "john racker"
3. "company"
4. "objectrocket"
5. "city"
6. "austin"ソート済みセット(Sorted Sets)
ソート済みセットは、重複しない文字列のコレクションである点でセットに似ていますが、すべてのメンバーがスコアと関連付けられている点が異なります。ソート済みセットはスコアに基づいて昇順にソートされます。同じ要素は一度しか存在できず、重複要素は許可されませんが、スコアは重複しても構いません。
この例では、2014年10月23日時点におけるイングランドプレミアリーグ上位5チームの勝ち点を追加します。
redis> ZADD EPL 22 "chelsea"
(integer) 1
redis> ZADD EPL 17 "man city"
(integer) 1
redis> ZADD EPL 16 "southampton"
(integer) 1
redis> ZADD EPL 13 "liverpool"
(integer) 1
redis> ZADD EPL 13 "west ham"
(integer) 1
redis> ZRANK EPL "chelsea"
(integer) 4
redis> ZRANK EPL "liverpool"
(integer) 0
redis> ZRANK EPL "arsenal"
(nil)次に、ZRANGEを使ってチームを勝ち点順に並べてみましょう。
redis> ZRANGE EPL 0 -1
1) "liverpool"
2) "west ham"
3) "southampton"
4) "man city"
5) "chelsea"
redis> ZRANGE EPL 2 3
1) "southampton"
2) "man city"ソート済みセットは昇順にソートされるため、勝ち点の多い順にランキングを確認するにはZREVRANGEを使用する必要があります。
redis> ZREVRANGE EPL 0 -1
1) "chelsea"
2) "man city"
3) "southampton"
4) "west ham"
5) "liverpool"
redis> ZREVRANGE EPL 0 -1 WITHSCORES
1) "chelsea"
2) "22"
3) "man city"
4) "17"
5) "southampton"
6) "16"
7) "west ham"
8) "13"
9) "liverpool"
10) "13"続いて、サウサンプトンが試合に勝利し、勝ち点を3つ獲得したとします。ZINCRBYでスコアを増加させ、ZREVRANGEでサウサンプトンがリーグ2位に浮上したことを確認できます。さらに、ZREVRANKを使えばサウサンプトンの現在の順位も取得できます。なお、順位は0始まりである点に注意してください。つまり、最もスコアの高いメンバー(チェルシー)の順位は0となります。
redis> ZINCRBY EPL 3 "southampton"
"19"
redis> ZREVRANGE EPL 0 -1 WITHSCORES
1) "chelsea"
2) "22"
3) "southampton"
4) "19"
5) "man city"
6) "17"
7) "west ham"
8) "13"
9) "liverpool"
10) "13"
redis> ZREVRANK EPL "southampton"
(integer) 1
redis> ZREVRANGEBYSCORE EPL 25 (15
1) "chelsea"
2) "southampton"
3) "man city"今後の記事では、Redisおよびこの万能な開発者ツールの具体的なユースケースについて、さらに掘り下げて解説していきます。Redisの運用に関するご質問や、アプリケーションスタックでのRedis活用事例の共有などがあれば、ぜひお気軽にご連絡ください。
-
Android MessagesをPCで使おう!Web版の初期設定と知って得する便利機能5選
Googleは巨大なプラットフォームであり、世界有数の検索エンジンであることは言うまでもありません。しかし、その実力は検索だけにとどまりません。日常生活をより快適にしてくれる多彩なサービスを数多く提供しています。そんなGoogleが、Android Messagesアプリのアップデートをリリースしました。これにより、任意のWebブラウザからSMSメッセージを送受信できるようになり、AndroidユーザーはPCやMacから手軽にメッセージのやり取りが可能になりました。 利用に必要なのは、最新版にアップデートしたAndroid Messagesアプリだけ。以下では、Web版Android Mess
-
Xen 仮想化の開始
Zで綴られるZenは、8時間保持した後、雪の中でおしっこをしているときに頭頂部にある典型的な感覚です. Xen は X で綴られており、KVM と同様に、企業市場を対象としていますが、家庭でもビジネスでもセットアップを検討できるオープンソースの仮想化テクノロジです。 KVM に関するいくつかのチュートリアルがあり、導入記事、ストレージとネットワーク (ブリッジ ネットワークを含む) のセットアップと構成の方法、および VirtualBox との競合の解決方法をカバーしています。ここで、Xen についてもう少し学びましょう。同様に、仮想マシンをインストールして実行するために必要な最初の手順、