Redisでリストを管理する方法は次のとおりです。

イントロダクション

Redisはオープンソースのインメモリキーバリューデータストアです。Redisにおいて、リストは挿入順に並べられた文字列のコレクションであり、リンクリストのようなものです。このチュートリアルでは、Redisのリスト内の要素の作成と操作方法について説明します。

このガイドの使い方

このガイドは、自己完結型の具体的な例を交えたチートシートとして書かれています。あなたが達成しようとしている課題に関連する任意のセクションに飛ぶことをお勧めします。

このガイドで示されたコマンドは、Redis v6.0.16を実行しているUbuntu 22.04サーバーでテストされました。同様の環境をセットアップするには、Ubuntu 22.04にRedisをインストールしセキュリティを設定するガイドのステップ1に従うことができます。これらのコマンドの振る舞いは、Redisのコマンドラインインターフェイスであるredis-cliを使用して実行されます。他のRedisインターフェース(例:Redli)を使用している場合、特定のコマンドの出力は異なる場合があります。

以下のように日本語に言い換えることができます:

また、これらのコマンドをテストするためには、管理されたRedisデータベースインスタンスを設定することもできます。ただし、データベースプロバイダによって許可される制御レベルによっては、このガイドの一部のコマンドが説明通りに動作しない場合があります。Silicon Cloudの管理されたデータベースを設定するには、Managed Databasesの製品ドキュメントに従ってください。その後、RedliをインストールするかTLSトンネルを設定する必要があります。それによってTLSを介して管理されたデータベースに接続することができます。

リストの作成

1つのキーは1つのリストしか持つことができませんが、任意のリストは40億を超える要素を持つことができます。Redisは左から右にリストを読み取ります。lpushコマンドまたはrpushコマンドを使用してリストの先頭(左端)に新しい要素を追加することもできます。また、lpushまたはrpushコマンドを使用して新しいリストを作成することもできます。

  1. lpush key value

 

両方のコマンドは、リスト内の要素の数を示す整数を出力します。例として、以下のコマンドを実行して「私は考える、ゆえに私は存在する」という文言を含むリストを作成してください。

  1. lpush key_philosophy1 “therefore”
  2. lpush key_philosophy1 “think”
  3. rpush key_philosophy1 “I”
  4. lpush key_philosophy1 “I”
  5. rpush key_philosophy1 “am”

 

最後のコマンドの出力結果は次のようになります。 (Saigo no komando no shutsuryoku kekka wa, jino you ni narimasu.)

Output

(integer) 5

単一のlpushまたはrpushステートメントで複数のリスト要素を追加することができることに注意してください。

  1. rpush key_philosophy1 “-“ “Rene” “Decartes”

 

lpushxとrpushxコマンドは、リストへの要素の追加にも使用されますが、指定されたリストが既に存在している場合にのみ動作します。どちらかのコマンドが失敗した場合、(整数) 0を返します。

  1. rpushx key_philosophy2 “Happiness” “is” “the” “highest” “good” “-“ “Aristotle”

 

Output

(integer) 0

リスト内の既存の要素を変更するには、キー名と変更したい要素のインデックス、新しい値を指定してlsetコマンドを実行します。

  1. lset key_philosophy1 5 “sayeth”

 

もし既存のキーにリスト要素を追加しようとする場合、そのキーがリストを含んでいない場合はデータ型の衝突が生じてエラーが返されます。例えば、以下のsetコマンドは文字列を保持するキーを作成しますので、その後のlpushを使ったリスト要素の追加は失敗します。

  1. set key_philosophy3 “What is love?”
  2. lpush key_philosophy3 “Baby don’t hurt me”

 

Output

(error) WRONGTYPE Operation against a key holding the wrong kind of value

Redisのキーのデータ型を別のデータ型に変換することはできません。そのため、key_philosophy3をリストに変換するには、キーを削除し、lpushまたはrpushコマンドで再び始める必要があります。

リストから要素を取得する

リスト内のアイテムの範囲を取得するには、lrangeコマンドを使用し、開始オフセットと停止オフセットを指定します。各オフセットは0から始まるインデックスであり、0はリスト内の最初の要素を表し、1は次の要素を表します。

前のセクションで作成された例のリストから、以下のコマンドを使用すると、すべての要素が返されます。

  1. lrange key_philosophy1 0 7

 

Output

1) “I” 2) “think” 3) “therefore” 4) “I” 5) “am” 6) “sayeth” 7) “Rene” 8) “Decartes”

lrangeに渡されるオフセットは負の数も使用できます。この場合に使用されると、-1はリストの最後の要素を表し、-2はリストの2番目から最後の要素を表します。次の例では、key_philosophy1に保持されているリストの最後の3つの要素を返します。

  1. lrange key_philosophy1 -3 -1

 

Output

1) “I” 2) “am” 3) “sayeth”

リストから単一の要素を取得するには、lindexコマンドを使用できます。ただし、このコマンドでは要素のインデックスを引数として指定する必要があります。lrangeと同様に、インデックスは0から始まるため、最初の要素はインデックス0、2番目の要素はインデックス1、以降順になります。

  1. lindex key_philosophy1 4

 

Output

“am”

与えられたリストの要素の数を知るためには、「llen」コマンドを使用します。これは「リストの長さ」を意味する省略形です。

  1. llen key_philosophy1

 

Output

(integer) 8

指定されたキーに保存されている値が存在しない場合、llenはエラーを返します。

リストから要素を削除する。

lremコマンドは、与えられた値に一致する特定の数の最初の出現を削除します。これを試すために、次のリストを作成してください。

  1. rpush key_Bond “Never” “Say” “Never” “Again” “You” “Only” “Live” “Twice” “Live” “and” “Let” “Die” “Tomorrow” “Never” “Dies”

 

以下のlremの例は、値「Live」の最初の出現を削除します。

  1. lrem key_Bond 1 “Live”

 

このコマンドは、リストから削除された要素の数を出力します。

Output

(integer) 1

lremコマンドに渡される番号は、マイナスの値にすることもできます。以下の例では、「Never」という値の最後の2つの出現を削除します。

  1. lrem key_Bond -2 “Never”

 

Output

(integer) 2

lpopコマンドはリストから最初または「最も左の」要素を削除し、返します。

  1. lpop key_Bond

 

Output

“Never”

同様に、リストから最後の要素または「最も右側」の要素を削除して返すには、rpopを使用します。 (Dōyō ni, risuto kara saigo no yōso matawa “mottomo migi gawa” no yōso o sakujo shite kaesu ni wa, rpop o shiyō shimasu.)

  1. rpop key_Bond

 

Output

“Dies”

Redisには、rpoplpushコマンドも含まれており、リストの最後の要素を削除し、別のリストの先頭にプッシュする機能があります。

  1. rpoplpush key_Bond key_AfterToday

 

Output

“Tomorrow”

もし、rpoplpushコマンドに渡されたソースキーと宛先キーが同じ場合、リスト内の要素は実質的に回転します。

結論

このガイドでは、Redisでリストを作成し管理するために使用できるいくつかのコマンドについて詳しく説明しています。もし他に関連するコマンドや引数、手順など、このガイドで学びたいものがあれば、コメントで質問や提案をしてください。

Redisコマンドに関する詳細な情報については、Redisデータベースの管理方法に関する当社のチュートリアルシリーズをご覧ください。

コメントを残す 0

Your email address will not be published. Required fields are marked *