Redisの基本
はじめに
このページではRedisの基本的なコマンドや機能について記述します。
Redisとは
Redis(REmote DIctionary Server)は、オープンソースのインメモリデータストアであり、主にデータのキャッシュ、メッセージキュー、セッションストアとして利用されます。キーと値のデータ構造を効率的に保存・管理することができ、非常に高速なデータ操作を可能にします。
Redisのインストール
Redisのインストールは、Linux、macOS、Windowsなど様々な環境で簡単に行うことができます。LinuxベースのシステムでRedisをインストールする場合、以下のコマンドでインストールが可能です。
sudo apt update
sudo apt install redis-server
インストールが完了したら、以下のコマンドでRedisサーバーを起動します。
sudo service redis-server start
Redisが正しく動作しているかどうかは、次のコマンドで確認できます。
redis-cli ping
"PONG"と返ってくればRedisは正常に動作しています。
Redisの基本コマンド
SET
と GET
1. Redisでは、データはキーと値のペアで保存されます。SET
コマンドでデータを保存し、GET
コマンドでデータを取得できます。
SET mykey "Hello Redis"
GET mykey
上記のコマンドで、キー mykey
に "Hello Redis" という値を保存し、GET
でその値を取得します。
EXPIRE
と TTL
2. EXPIRE
コマンドはキーに対して有効期限を設定し、TTL
コマンドでその有効期限の残り時間を確認することができます。
SET session "active"
EXPIRE session 60 # 60秒後に削除
TTL session # 残り有効期限を確認
DEL
3. DEL
コマンドでキーを削除できます。
DEL mykey
INCR
と DECR
4. Redisは整数のインクリメントやデクリメントを簡単に行うことができます。
INCR counter
DECR counter
このコマンドは、数値を保持しているキー counter
をインクリメントまたはデクリメントします。
LPUSH
, RPUSH
, LRANGE
)
5. リスト操作 (Redisではリストデータ型もサポートしており、スタックやキューのようなデータ操作ができます。
-
LPUSH
はリストの左端に値を追加します。 -
RPUSH
はリストの右端に値を追加します。 -
LRANGE
は指定した範囲のリスト要素を取得します。
LPUSH mylist "value1"
RPUSH mylist "value2"
LRANGE mylist 0 -1 # リストの全要素を取得
HSET
, HGET
, HGETALL
)
6. ハッシュ操作 (Redisは、ハッシュデータ型もサポートしており、オブジェクトのようなデータ構造を格納できます。
HSET user:1000 name "Alice"
HSET user:1000 age 30
HGET user:1000 name # "Alice" が返される
HGETALL user:1000 # 全てのフィールドと値を取得
SADD
, SMEMBERS
)
7. 集合操作 (Redisはセット(集合)もサポートしており、重複しない値の集合を管理できます。
SADD myset "value1"
SADD myset "value2"
SMEMBERS myset # セットの全要素を取得
ZADD
, ZRANGE
)
8. ソート済みセット (ソート済みセットは、要素にスコアを関連付けて順序を管理するデータ型です。
ZADD leaderboard 100 "Alice"
ZADD leaderboard 200 "Bob"
ZRANGE leaderboard 0 -1 WITHSCORES # 全要素をスコアと共に取得
Redisのデータ管理コマンド
FLUSHDB
9. FLUSHDB
コマンドは、現在選択されているデータベースのすべてのキーを削除します。これは、キャッシュを完全にクリアする場合や、一時的なデータをすべて削除する場合に便利です。
FLUSHDB
注意点として、FLUSHDB
は復元できない操作なので、実行には慎重になる必要があります。また、すべてのデータベースをクリアする場合は FLUSHALL
を使用します。
KEYS *
10. KEYS
コマンドは、指定されたパターンに一致するすべてのキーを返します。例えば、*
を使用することで全てのキーを取得することができます。
KEYS *
ただし、このコマンドは多くのキーが存在する場合、パフォーマンスに大きく影響するため、本番環境では推奨されません。代わりに、キーを効率的に検索する方法として SCAN
コマンドの使用が推奨されます。SCAN
は非ブロッキングでキーを分割して取得するため、大規模なデータセットでもパフォーマンスに優れています。
SCAN 0
Redisの永続化方法
Redisはインメモリデータストアですが、データの永続化も可能です。以下の2つの方法でデータをディスクに保存できます。
- RDB (Redis Database File): 定期的にスナップショットをディスクに保存します。
- AOF (Append Only File): 各書き込み操作をログに記録します。
RDBの設定
redis.conf
ファイルでスナップショットの頻度を設定できます。たとえば、以下の設定は、900秒ごとに1回以上の書き込みがあった場合にスナップショットを作成する設定です。
save 900 1
AOFの設定
AOFを有効にするには、redis.conf
で次の設定を変更します。
appendonly yes
AOFを使用すると、サーバーの再起動時にすべての書き込み操作がリプレイされ、データが復元されます。
Redisのクライアント
Redisには多くのクライアントライブラリが存在し、様々なプログラミング言語から利用できます。例えば、PythonでRedisを利用する場合、redis-py
ライブラリを使うことができます。
pip install redis
Pythonコードの例:
import redis
r = redis.Redis(host='localhost', port=6379, db=0)
r.set('foo', 'bar')
print(r.get('foo'))
Redisの監視
Redisはさまざまな監視ツールを提供しており、INFO
コマンドを使用してサーバーの統計情報を取得できます。
INFO
これにより、メモリ使用量、接続数、命令数などの詳細な情報が表示されます。
まとめ
Redisは高速なインメモリデータベースとして、キャッシュ、キュー、セッション管理など様々な用途で活用されます。
Discussion