Redisの基本的なデータ管理

RedisBeginner
オンラインで実践に進む

はじめに

この実験では、Redis における基本的なデータ管理手法を学びます。まずは、カウンターやレート制限などに適した、アトミックな INCR および DECR コマンドを使用して数値を増減させる方法を習得します。redis-cli を使って Redis サーバーに接続し、初期値を設定した上で増減操作を行い、GET コマンドで結果を確認します。

さらに、KEYS コマンドを使用して Redis に保存されているすべてのキーを取得する方法についても学びます。

INCR/DECR を使用した値の増減

このステップでは、INCR および DECR コマンドを使用して、Redis に保存された数値を増減させる方法を学びます。これらのコマンドはアトミック(不可分)であり、他のクライアントからの干渉を受けずに実行されることが保証されているため、カウンターやレート制限といったタスクに適しています。

まず、ターミナルで redis-cli コマンドを使用して Redis サーバーに接続します。

redis-cli

次に、mycounter というキーに初期値 10 を設定します。これにより、Redis データベース内にキーと値のペアが作成されます。キーは mycounter、値は 10 です。

SET mycounter 10

キーが正常に設定されたことを示す以下の出力が表示されるはずです。

OK

INCR コマンドは、キーの値を 1 増加させます。mycounter をインクリメントしてみましょう。

INCR mycounter

インクリメントされた値が出力されます。

(integer) 11

値を確認するには、GET コマンドを使用します。

GET mycounter

出力は以下のようになります。

"11"

DECR コマンドは、キーの値を 1 減少させます。mycounter をデクリメントしてみましょう。

DECR mycounter

デクリメントされた値が出力されます。

(integer) 10

再度 GET で値を確認します。

GET mycounter

出力は以下のようになります。

"10"

キーが存在しない場合、INCR および DECR はそのキーに値 0 が格納されているものとして扱います。存在しないキー newcounter をインクリメントしてみましょう。

INCR newcounter

出力は以下のようになります。

(integer) 1

ここで newcounter の値を確認します。

GET newcounter

出力は以下のようになります。

"1"

同様に、存在しないキーをデクリメントすると 0 として扱われ、-1 になります。

DECR anothercounter

出力は以下のようになります。

(integer) -1
GET anothercounter

出力は以下のようになります。

"-1"

最後に、redis-cli を終了します。

exit

コマンド履歴が適切に記録されるよう、コマンド完了後は必ず redis-cli を終了するようにしてください。

KEYS を使用した全キーの取得

このステップでは、KEYS コマンドを使用して Redis に保存されているすべてのキーを取得する方法を学びます。KEYS は開発やデバッグには便利ですが、データセットが大きい本番環境ではサーバーをブロックする可能性があるため、一般的には推奨されません。

まず、redis-cli を使用して Redis サーバーに接続します。

redis-cli

前のステップで、mycounternewcounteranothercounter といういくつかのキーを作成しました。例をより興味深いものにするために、いくつかキーを追加してみましょう。

SET user:1000:name "John"
SET user:1000:age 30
SET user:1001:name "Jane"

次に、* パターンを指定して KEYS コマンドを実行し、データベース内のすべてのキーを取得します。

KEYS *

すべてのキーのリストが出力されます。

1) "anothercounter"
2) "user:1000:age"
3) "user:1001:name"
4) "mycounter"
5) "newcounter"
6) "user:1000:name"

キーの順序は異なる場合があります。

パターンを使用して、特定の条件に一致するキーを取得することもできます。例えば、user: で始まるすべてのキーを取得するには、以下のコマンドを使用します。

KEYS user:*

出力は以下のようになります。

1) "user:1000:age"
2) "user:1001:name"
3) "user:1000:name"

別の例として、counter を含むすべてのキーを取得するには、以下のコマンドを使用します。

KEYS *counter*

出力は以下のようになります。

1) "anothercounter"
2) "mycounter"
3) "newcounter"

大規模なデータベースで KEYS * を使用するとパフォーマンスに影響を与える可能性があることに注意してください。本番環境では、キー空間を非ブロック的に反復処理できる SCAN コマンドの使用を検討してください。

最後に、redis-cli を終了します。

exit

TYPE を使用したデータ型の確認

このステップでは、TYPE コマンドを使用して、Redis に保存されているキーのデータ型を確認する方法を学びます。Redis は文字列(string)、リスト(list)、セット(set)、ソート済みセット(sorted set)、ハッシュ(hash)など、さまざまなデータ型をサポートしています。キーに対して適切な操作を行うためには、そのデータ型を理解することが不可欠です。

まず、redis-cli を使用して Redis サーバーに接続します。

redis-cli

前のステップで、異なる値を持ついくつかのキーを作成しました。それらのデータ型を確認してみましょう。

まず、mycounter キーのデータ型を確認します。

TYPE mycounter

出力は以下のようになります。

string

これは、mycounter が数値を含んでいても文字列として保存されていることを示しています。Redis は SET を使用する際、数値を自動的に文字列に変換します。

次に、user:1000:name キーのデータ型を確認します。

TYPE user:1000:name

出力は以下のようになります。

string

これも user:1000:name が文字列として保存されていることを示しています。

次に、存在しないキー(例:nonexistentkey)のデータ型を確認してみましょう。

TYPE nonexistentkey

出力は以下のようになります。

none

これは、そのキーがデータベースに存在しないことを示しています。

データ型をさらに理解するために、リストを作成してみましょう。

LPUSH mylist "item1"
LPUSH mylist "item2"

ここで mylist のデータ型を確認します。

TYPE mylist

出力は以下のようになります。

list

これで mylist がリストとして保存されていることが確認できました。

同様に、セット、ソート済みセット、ハッシュなどの他のデータ型を作成し、TYPE コマンドで型を確認できます。例:

SADD myset "member1"
SADD myset "member2"
TYPE myset

出力は以下のようになります。

set
ZADD mysortedset 1 "element1"
ZADD mysortedset 2 "element2"
TYPE mysortedset

出力は以下のようになります。

zset
HSET myhash field1 "value1"
HSET myhash field2 "value2"
TYPE myhash

出力は以下のようになります。

hash

最後に、redis-cli を終了します。

exit

FLUSHDB を使用したデータのクリア

このステップでは、FLUSHDB コマンドを使用して、現在選択されている Redis データベースからすべてのデータをクリアする方法を学びます。このコマンドは、開発中やテスト中にデータベースをリセットする際に便利です。本番環境では、データベース内のすべてのデータが完全に削除されるため、このコマンドの使用には十分注意してください。

まず、redis-cli を使用して Redis サーバーに接続します。

redis-cli

データベースをフラッシュする前に、キーが存在することを確認します。KEYS * コマンドを使用してください。

KEYS *

前のステップで作成した mycounternewcounteruser:1000:namemylist などのキーリストが表示されるはずです。

次に、FLUSHDB コマンドを実行します。

FLUSHDB

出力は以下のようになります。

OK

これは、データベースが正常にフラッシュされたことを示しています。

データベースが空になったことを確認するために、再度 KEYS * コマンドを使用します。

KEYS *

空のリストが出力されます。

(empty array)

これで、すべてのキーがデータベースから削除されたことが確認できました。

FLUSHDB は現在選択されているデータベースのみをクリアするという点に注意してください。Redis は複数のデータベース(デフォルトで 0 から 15 の番号)をサポートしています。すべてのデータベースをクリアしたい場合は FLUSHALL コマンドを使用できますが、意図しないデータ損失を避けるため、この実験では FLUSHALL は使用しません。

最後に、redis-cli を終了します。

exit

まとめ

この実験では、Redis における基本的なデータ管理手法を学びました。具体的には、カウンターやレート制限の実装に役立つ、アトミックな INCR および DECR コマンドを使用して数値を増減させる練習を行いました。また、キーが存在しない場合、これらのコマンドは値 0 が格納されているものとして扱うことも学びました。

さらに、Redis に保存されているすべてのキーを取得するための KEYS コマンドを紹介しました。これは開発やデバッグには便利ですが、大規模なデータセットを持つ本番環境では一般的に推奨されません。最後に、データ型の確認方法とデータベースのクリア方法を学びました。