😊

Redisの基本

2024/10/03に公開

はじめに

このページでは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の基本コマンド

1. SETGET

Redisでは、データはキーと値のペアで保存されます。SET コマンドでデータを保存し、GET コマンドでデータを取得できます。

SET mykey "Hello Redis"
GET mykey

上記のコマンドで、キー mykey に "Hello Redis" という値を保存し、GET でその値を取得します。

2. EXPIRETTL

EXPIRE コマンドはキーに対して有効期限を設定し、TTL コマンドでその有効期限の残り時間を確認することができます。

SET session "active"
EXPIRE session 60   # 60秒後に削除
TTL session         # 残り有効期限を確認

3. DEL

DEL コマンドでキーを削除できます。

DEL mykey

4. INCRDECR

Redisは整数のインクリメントやデクリメントを簡単に行うことができます。

INCR counter
DECR counter

このコマンドは、数値を保持しているキー counter をインクリメントまたはデクリメントします。

5. リスト操作 (LPUSH, RPUSH, LRANGE)

Redisではリストデータ型もサポートしており、スタックやキューのようなデータ操作ができます。

  • LPUSH はリストの左端に値を追加します。
  • RPUSH はリストの右端に値を追加します。
  • LRANGE は指定した範囲のリスト要素を取得します。
LPUSH mylist "value1"
RPUSH mylist "value2"
LRANGE mylist 0 -1   # リストの全要素を取得

6. ハッシュ操作 (HSET, HGET, HGETALL)

Redisは、ハッシュデータ型もサポートしており、オブジェクトのようなデータ構造を格納できます。

HSET user:1000 name "Alice"
HSET user:1000 age 30
HGET user:1000 name   # "Alice" が返される
HGETALL user:1000     # 全てのフィールドと値を取得

7. 集合操作 (SADD, SMEMBERS)

Redisはセット(集合)もサポートしており、重複しない値の集合を管理できます。

SADD myset "value1"
SADD myset "value2"
SMEMBERS myset       # セットの全要素を取得

8. ソート済みセット (ZADD, ZRANGE)

ソート済みセットは、要素にスコアを関連付けて順序を管理するデータ型です。

ZADD leaderboard 100 "Alice"
ZADD leaderboard 200 "Bob"
ZRANGE leaderboard 0 -1 WITHSCORES  # 全要素をスコアと共に取得

Redisのデータ管理コマンド

9. FLUSHDB

FLUSHDB コマンドは、現在選択されているデータベースのすべてのキーを削除します。これは、キャッシュを完全にクリアする場合や、一時的なデータをすべて削除する場合に便利です。

FLUSHDB

注意点として、FLUSHDB は復元できない操作なので、実行には慎重になる必要があります。また、すべてのデータベースをクリアする場合は FLUSHALL を使用します。

10. KEYS *

KEYS コマンドは、指定されたパターンに一致するすべてのキーを返します。例えば、* を使用することで全てのキーを取得することができます。

KEYS *

ただし、このコマンドは多くのキーが存在する場合、パフォーマンスに大きく影響するため、本番環境では推奨されません。代わりに、キーを効率的に検索する方法として SCAN コマンドの使用が推奨されます。SCAN は非ブロッキングでキーを分割して取得するため、大規模なデータセットでもパフォーマンスに優れています。

SCAN 0

Redisの永続化方法

Redisはインメモリデータストアですが、データの永続化も可能です。以下の2つの方法でデータをディスクに保存できます。

  1. RDB (Redis Database File): 定期的にスナップショットをディスクに保存します。
  2. 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