こちらの記事ではredis Cache Serverのリストデータタイプを紹介します。
さ、FAを楽しもう。
Reference Link
LIST
Redisリストは文字列値のLink Listであり、スタックとキューの実装やバックグラウンドワーカーシステムのキュー管理を構築するなどで活用できます。また、Redisのリストはリンクリストによって実装されているので、リスト内に数百万個の要素があっても、リストの先頭や末尾に新しい要素を追加する操作は一定の時間で実行されます。
それによって、10個の要素を持つリストの先頭にLPUSHコマンドで新しい要素を追加する速度は、1000万個の要素を持つリストの先頭に要素を追加する速度と同じです。
逆に、インデックスによる要素へのアクセスの配列で実装されたリストでは非常に速く、リンクリストで実装されたリストではそれほど速くありません。
Redisリストがリンクリストを使って実装されているのは、データベースシステムにとって、非常に長いリストに非常に高速に要素を追加できることが極めて重要だからです。また、要素の追加などは高速です。
{‘Beckhoff’,’OMRON’,’Codesys’,’Beckhoff’} |
LPUSH
LPUSHコマンドを使用すれば、keyに格納されているリストの先頭に、指定された値をすべて挿入する。keyが存在しない場合は、プッシュ操作を行う前に空リストとして作成されます
下図の例ではLPUSHコマンドでPLCs というリストを追加し、”Beckhoff”文字列を追加します。また、Keyが存在していませんので、新規のリストを作成することになります。
Done!1がReturnされたので、List内に1の値が追加されました。
次はBrowserでもPLCsというLISTが追加されたことが確認できました。
もう一度LPUSHコマンドを使用し、リストPLCsに”Codesys”値を追加します。
Done!2がReturnされたので、リストPLCsが現在2つの値があることがわかります。
BrowserからPLCsリストを確認すると。Index0=Codesys、Index1=Beckhoffですね。
それはLPUSHコマンドの特徴で、LPUSHはリストの左(L)側にValueを追加します。
なので、リストの先頭に新要素を挿入することになります。
RPUSH
RPUSHコマンドを使用すれば、keyに格納されているリストの末尾に、指定された値をすべて挿入します。keyが存在しない場合は、プッシュ操作を行う前に空リストとして作成されます。
下図の例ではRPUSHコマンドで”OMRON”文字列を追加します。
BrowserからPLCsリストを確認すると。Index0=Codesys、Index1=Beckhoff、2=OMRONですね。
それはRPUSHコマンドの特徴で、RPUSHはリストの左(R)側にValueを追加します。
なので、リストの一番最後に新要素を挿入することになります。
LPOP
LPOPコマンドを使用すればkey に格納されているリストの最初の要素を削除して返すことになります。それではまずLPUSHコマンドでPLCsキーに”WAGO”と”TURCK”を先頭に挿入します。
現在PLCsキーには6つの値があります。
下図の例でLPOPコマンドでPLCsキーを1に削除していきます。
Done!”TURCK”が返答されたのでPLCキーの”TURCK”が削除されました。
現在PLCsキーでIndex0は”WAGO”に変わりました。
RPOP
RPOPコマンドを使用すればkey に格納されているリストの最後の要素を削除して返すことができます。下図の例ではRPOPコマンドでPLCsキーに一番最後から2つの要素を削除します。
Done!”OMRON”が二回Returnされ、PLCsキーに一番最後にある2つの”OMRON”要素が削除されました。
LLEN
LLENコマンドを使用すればkey に格納されているリストの長さを返すことができます。keyが存在しない場合は0が返されます。下図の例ではLLENコマンドを使用しPLCsキーの長さを取得します。
Done!3が返答されたので、PLCsキーには3つの要素があることがわかります。
LRANGE
LRANGEコマンドを使用すれば、key に格納されているリストの指定された要素を返すことができます。下図の例ではLRANGEコマンドを使ってPLCsキーの0から1までの要素を取得します。
Done!Index0の”WAGO”とIndex1の”Codesys”が返答されました。
次は同じLRANGEコマンドでPLCsキーの−2から−1までを取得します。
Done!Index1の”Codesys”とIndex2の”Beckhoff”が返答されました。
LINDEX
LINDEXコマンドはkey に格納されているリストの index 番目の要素を返すことができます。下図の例ではPLCs リストのの中に2番目の値を取り出します。
Done!Serverから”Beckhoff”(Index=2)の返答がきました。
LPOS
LPOSコマンドは、Redisリスト内のマッチする要素のインデックスを返します。 要素が見つかると、そのインデックス(リスト内のゼロベースの位置)が返され、 それ以外の場合は、マッチするものが見つからなければnilが返されます。
下図の例ではPLCsリストの中に”Beckhoff”という要素のIndexを取得します。
Done!”Beckhoff”のIndexが2であることがわかりました。