Redisに関する小さな知識
6051 ワード
Redis共通コマンド
原子間成長:
1つのコマンドで複数のキーを一度に設定または取得することは、遅延を低減するのに役立ちます.そのためにMSETとMGETコマンドがあります.
DELコマンド削除キーとその関連する値
keyの保存期間expireの設定
TTLコマンドチェックキーの生存残時間
Redisリスト
LPUSHコマンドは左(ヘッダ)からリストに要素を追加し、RPUSHコマンドは右(末尾)から要素のリストを追加します.LRANGEコマンドは、リストから範囲内の要素を抽出します.
注意LRANGEコマンドは、2つのインデックスの下付き文字を使用します.それぞれ、返される範囲の開始要素と終了要素です.2つのインデックス座標は負数であってもよく、後ろから前への数を表すので、-1は最後の要素を表し、-2は最後から2番目の要素を表すなどします.ご覧のように、RPUSHはリストの右側に要素を追加し、LPUSHはリストの左側に要素を追加します.両方のコマンドは可変パラメータコマンドです.つまり、1つのコマンド呼び出しで複数の要素をリストに自由に追加できます.
Redisリストに定義される重要なアクションの1つは、ポップアップ要素です.ポップアップ要素とは、リストから要素を取得し、リストから明確にする操作です.リストの両端から要素を追加できるように、左または右から要素をポップアップできます.
Lpush、rpush、lpop、rpopを活用することでredis-listをキューやマリーに変えることができます
リストのブロック操作(blocking)リストには、通常、プロセス間通信システムの積み木であるブロック操作を実現するのに適した特別な特性がある.あるプロセスのリストにアイテムを追加し、別のプロセスで処理したいとします.これが通常の生産者消費者モデルであり、
· 生産者はLPUSH追加項目をリストに呼び出します.
· 消費者はRPOPを呼び出してリストからアイテムを抽出/処理する.
しかし、リストが空で、処理する必要がない場合、RPOPはNULLを返します.そのため、消費者はしばらく待たせられ、RPOPコマンドを再試行します.これをポーリング(polling)と呼び、いくつかの欠点があるため、この場合:1.Redisとクライアントに不要なコマンドの処理を強制します(リストが空の場合、すべてのリクエストが実際の作業を実行せず、NULLのみが返されます). 2.作業者がNULLを受け取るとしばらく待つため、アイテムの処理が遅延します.そこでRedisはBRPOPとBLPOPの2つのコマンドを実現し、リストが空の場合、RPOPとLPOPのブロックバージョンです.新しい要素がリストに追加された場合、またはユーザーの指定したタイムアウト時間に達した場合にのみ、呼び出し元に戻ります.これは、作業者がBRPOPを呼び出した例です.
「tasksリストの要素を待ち、5秒後に利用可能な要素がなければ戻る」という意味です.0をタイムアウト要素として使用したり、1つだけでなく複数のリストを指定したりして、最初のリストが要素を受信すると通知されます.BRPOPに関するいくつかの注意事項. 1.クライアント順サービス:最初にブロックされた待機リストのクライアント、他のクライアントが追加した要素などを最初に受信します. 2.RPOPの戻り値とは異なり、BRPOPとBLPOPが複数のリストを待つ要素をブロックできるため、キーの名前を含む配列が返されます. 3.タイムアウト時間が到着した場合はNULLを返します.リストとブロックオプションについては、以下のページを読むことをお勧めします.
· RPOLPUSHを使用して、より安全なキューと回転キューを構築します.
· BRPOLPUSHコマンドは、そのブロック変種コマンドです.
すべての要素がポップアップされると、キーは存在しません.
リソースプールとしてリソースを管理するのに適しています
Redis集合(Sets)Redis集合は無秩序な文字列集合(collections)である.SADDコマンドは、集合に要素を追加します.また、要素が存在するかどうかをテストしたり、複数の集合に対して交差、並列セット、差分セットを実行したりするなど、集合に対して多くの他の操作を実行することもできます.
辞書の点数(Lexicographical scores)の最近のRedis 2.8バージョンでは、集合内の要素が同じスコアを持つと仮定し、辞書順に範囲を取得できるようにする新しい特性が導入されました(要素はC言語のmemcmp関数で比較されるため、整理されていないことが保証され、各Redisインスタンスは同じ出力になります).辞書の順序範囲を操作する主なコマンドは、ZRANGEBYLEX、ZREVRANGEBYLEX、ZREMRANGEBYLEX、ZLEXCOUNTです.たとえば、有名なハッカーリストを再追加します.しかし、今回は要素ごとに0スコアを使用します.
順序付けされた集合のソート・ルールに基づいて、辞書の順序で並べられています.
ZRANGEBYLEXを使用すると、辞書の順序範囲を問い合わせることができます.
NoSql特性
原子間成長:
> set counter 100
OK
> incr counter
(integer) 101
> incr counter
(integer) 102
> incrby counter 50
(integer) 152
1つのコマンドで複数のキーを一度に設定または取得することは、遅延を低減するのに役立ちます.そのためにMSETとMGETコマンドがあります.
> mset a 10 b 20 c 30
OK
> mget a b c
1) "10"
2) "20"
3) "30"
DELコマンド削除キーとその関連する値
> set mykey hello
OK
> exists mykey
(integer) 1
> del mykey
(integer) 1
> exists mykey
(integer) 0
keyの保存期間expireの設定
> set key some-value
OK
> expire key 5
(integer) 1
> get key (immediately)
"some-value"
> get key (after some time)
(nil)
TTLコマンドチェックキーの生存残時間
> set key 100 ex 10
OK
> ttl key
(integer) 9
Redisリスト
LPUSHコマンドは左(ヘッダ)からリストに要素を追加し、RPUSHコマンドは右(末尾)から要素のリストを追加します.LRANGEコマンドは、リストから範囲内の要素を抽出します.
> rpush mylist A
(integer) 1
> rpush mylist B
(integer) 2
> lpush mylist first
(integer) 3
> lrange mylist 0 -1
1) "first"
2) "A"
3) "B"
注意LRANGEコマンドは、2つのインデックスの下付き文字を使用します.それぞれ、返される範囲の開始要素と終了要素です.2つのインデックス座標は負数であってもよく、後ろから前への数を表すので、-1は最後の要素を表し、-2は最後から2番目の要素を表すなどします.ご覧のように、RPUSHはリストの右側に要素を追加し、LPUSHはリストの左側に要素を追加します.両方のコマンドは可変パラメータコマンドです.つまり、1つのコマンド呼び出しで複数の要素をリストに自由に追加できます.
> rpush mylist 1 2 3 4 5 "foo bar"
(integer) 9
> lrange mylist 0 -1
1) "first"
2) "A"
3) "B"
4) "1"
5) "2"
6) "3"
7) "4"
8) "5"
9) "foo bar"
Redisリストに定義される重要なアクションの1つは、ポップアップ要素です.ポップアップ要素とは、リストから要素を取得し、リストから明確にする操作です.リストの両端から要素を追加できるように、左または右から要素をポップアップできます.
> rpush mylist a b c
(integer) 3
> rpop mylist
"c"
> rpop mylist
"b"
> rpop mylist
"a"
Lpush、rpush、lpop、rpopを活用することでredis-listをキューやマリーに変えることができます
リストのブロック操作(blocking)リストには、通常、プロセス間通信システムの積み木であるブロック操作を実現するのに適した特別な特性がある.あるプロセスのリストにアイテムを追加し、別のプロセスで処理したいとします.これが通常の生産者消費者モデルであり、
· 生産者はLPUSH追加項目をリストに呼び出します.
· 消費者はRPOPを呼び出してリストからアイテムを抽出/処理する.
しかし、リストが空で、処理する必要がない場合、RPOPはNULLを返します.そのため、消費者はしばらく待たせられ、RPOPコマンドを再試行します.これをポーリング(polling)と呼び、いくつかの欠点があるため、この場合:1.Redisとクライアントに不要なコマンドの処理を強制します(リストが空の場合、すべてのリクエストが実際の作業を実行せず、NULLのみが返されます). 2.作業者がNULLを受け取るとしばらく待つため、アイテムの処理が遅延します.そこでRedisはBRPOPとBLPOPの2つのコマンドを実現し、リストが空の場合、RPOPとLPOPのブロックバージョンです.新しい要素がリストに追加された場合、またはユーザーの指定したタイムアウト時間に達した場合にのみ、呼び出し元に戻ります.これは、作業者がBRPOPを呼び出した例です.
> brpop tasks 5
1) "tasks"
2) "do_something"
「tasksリストの要素を待ち、5秒後に利用可能な要素がなければ戻る」という意味です.0をタイムアウト要素として使用したり、1つだけでなく複数のリストを指定したりして、最初のリストが要素を受信すると通知されます.BRPOPに関するいくつかの注意事項. 1.クライアント順サービス:最初にブロックされた待機リストのクライアント、他のクライアントが追加した要素などを最初に受信します. 2.RPOPの戻り値とは異なり、BRPOPとBLPOPが複数のリストを待つ要素をブロックできるため、キーの名前を含む配列が返されます. 3.タイムアウト時間が到着した場合はNULLを返します.リストとブロックオプションについては、以下のページを読むことをお勧めします.
· RPOLPUSHを使用して、より安全なキューと回転キューを構築します.
· BRPOLPUSHコマンドは、そのブロック変種コマンドです.
すべての要素がポップアップされると、キーは存在しません.
リソースプールとしてリソースを管理するのに適しています
Redis集合(Sets)Redis集合は無秩序な文字列集合(collections)である.SADDコマンドは、集合に要素を追加します.また、要素が存在するかどうかをテストしたり、複数の集合に対して交差、並列セット、差分セットを実行したりするなど、集合に対して多くの他の操作を実行することもできます.
> sadd myset 1 2 3
(integer) 3
> smembers myset
1. 3
2. 1
3. 2
> sismember myset 3
(integer) 1
> sismember myset 30
(integer) 0
辞書の点数(Lexicographical scores)の最近のRedis 2.8バージョンでは、集合内の要素が同じスコアを持つと仮定し、辞書順に範囲を取得できるようにする新しい特性が導入されました(要素はC言語のmemcmp関数で比較されるため、整理されていないことが保証され、各Redisインスタンスは同じ出力になります).辞書の順序範囲を操作する主なコマンドは、ZRANGEBYLEX、ZREVRANGEBYLEX、ZREMRANGEBYLEX、ZLEXCOUNTです.たとえば、有名なハッカーリストを再追加します.しかし、今回は要素ごとに0スコアを使用します.
> zadd hackers 0 "Alan Kay" 0 "Sophie Wilson" 0 "Richard Stallman" 0
"Anita Borg" 0 "Yukihiro Matsumoto" 0 "Hedy Lamarr" 0 "Claude Shannon"
0 "Linus Torvalds" 0 "Alan Turing"
順序付けされた集合のソート・ルールに基づいて、辞書の順序で並べられています.
> zrange hackers 0 -1
1) "Alan Kay"
2) "Alan Turing"
3) "Anita Borg"
4) "Claude Shannon"
5) "Hedy Lamarr"
6) "Linus Torvalds"
7) "Richard Stallman"
8) "Sophie Wilson"
9) "Yukihiro Matsumoto"
ZRANGEBYLEXを使用すると、辞書の順序範囲を問い合わせることができます.
> zrangebylex hackers [B [P
1) "Claude Shannon"
2) "Hedy Lamarr"
3) "Linus Torvalds"
NoSql特性