Redisシステム学習四、データ構造を超える

5886 ワード

5種類のデータ構造がRedisの基礎を構成しており,他にも特定のデータ構造に関連付けられていない命令が多い.info、select、flushdb、multi、exec、discard、watch、keysというコマンドを見たことがあります.この章では、他の重要なコマンドを見てみましょう.
使用期限(Expiration)
Redisでは、キーワードの使用期限をマークできます.Unixタイムスタンプ形式(1970,001から)の絶対時間を与えるか、秒ベースの生存時間を与えることができます.これはキーワードベースのコマンドなので、キーワードがどのタイプのデータ構造を表すかは気にしません.
    expire pages:about 30  expire pages:about 1356933600
最初のコマンドは、関連する値を含むキーワードを30秒後に削除し、2番目のコマンドは2012年12月31日午前12時にキーワードを削除します.
これにより、Redisは理想的なバッファエンジンになります.ttlコマンドでは、キーワードがどのくらい生き残るかを知ることができます.persistコマンドでは、キーワードの使用期限を削除できます.
    ttl pages:about   persist pages:about
最後に特殊な文字列コマンドがあります.setexコマンドを使用すると、個別の原子コマンドで文字列値を設定し、生存期間を指定できます(これは何よりも便利です).
setex page:about 30'hellowolrd'は、set page:about'helloworld'を結合する2つのコマンドに相当します.expire page:about 30
パブリッシュとサブスクリプション
Redisのリストデータ構造にはblpopコマンドとbrpopコマンドがあり、リストから最初の(または最後の)要素を返して削除したり、1つの要素が操作できるまで詰まったりすることができます.簡単なキューを実現するために使用できます
また、Redisはメッセージの公開とチャンネルの購読に一流のサポートを持っています.2番目のredis-cliウィンドウを開いて、これらの機能を試してみてください.最初のウィンドウでチャンネルを購読する(A)
subscribe A 
購読した情報に返信します.別のウィンドウで、Aチャンネルにメッセージを送信します.
publish A'ねえit's A'
このとき、Aチャンネルを購読している人はAチャンネルが発表したメッセージを受け取るので、特に自慢しなければならないのは、複数のチャンネルを同時に購読することができることです.
subscribe A B Cはpingdao*
とてもつり上がっています!
監視と遅延ログ
優れたデバッグツール、monitor.モニタコマンドでは、Redsiが何をしているかを確認できます.しかし、デバッグと開発使用に限られ、生産環境を置かないでください.理由:自然に余分な費用がかかります.
モニタコマンドとともに、Redisにはslowlogコマンドがあり、優れたパフォーマンスプロファイルツールです.一定数の微妙なコマンドを記録します.
config set slowlog-log-slower-than 0
slowlog get slowlog get 10

对于每个被你键入的命令,你应该查看4个参数:

     1.一个自动递增的id 

     2.一个Unix时间戳,表示命令开始运行的时间 

     3.一个微妙级的时间,显示命令运行的总时间

     4.该命令以及所带参数 

延迟日志保存在内存中, 因此在生产环境中运行(即使有一个低阀值)也应该不是一个问题。默认情况下,它将会追踪最近的1024个日志
 
排序
    Sort 命令是Redis最强大的命令之一。它让你可以在一个列表、集合或者分类集合里对值进行排序(分类集合是通过标记来进行排序,而不是集合里的成员)。
rpush users:leto:guesses 5 9 10 2 4 10 19 2
sort users:leto:guesses
sadd friends:ghanima leto paul chani jessica alia duncan
sort friends:ghanima limit 0 3 desc alpha

上記のコマンドは、ソートされたレコードをページングする方法(limitを介して)、降順ソートの結果を返す方法(descを介して)、数値シーケンスの代わりに辞書シーケンスでソートする方法(alphaを介して)を示しています.sort命令の真の力は、参照オブジェクトに基づいてソートする能力である.以前は,リスト,集合,分類集合が他のRedisオブジェクトを参照するのによく用いられていることを説明し,sortコマンドはこれらの関係を解くことができ,潜在値によってソートすることができる.たとえば、Bugトラッカーを使用して、ユーザーにさまざまな問題があることを示すとします.監視中の問題を追跡するには、集合データ構造を使用します.
sadd watch:leto 12339 1382 338 9338

idでこれらの問題をソートしたいという強い感じがするかもしれませんが(デフォルトのソートはそうです)、問題の深刻さでこれらの問題をソートする可能性があります.そのため,Redisがどのパターンを用いてソートするかを教える.まず、意味のある結果を見るために、より多くのデータを追加します.
set severity:12339 3
set severity:1382 2
set severity:338 5
set severity:9338 4

問題の重大度によってこれらのBugを降順にソートするには、次のようにします.
sort watch:leto by severity:* desc

Redisは、パターンの*(byを介して)をリスト(集合または分類集合)に格納された値で置き換える.これによりキーワード名が作成され、Redisは実際の値をクエリーしてソートされます.
Redisでは、何千ものキーワードがありますが、上記のような関係は混乱を引き起こします.幸いなことに、sortコマンドは、ハッシュ・データ構造およびその関連ドメインでも動作します.大量の高レベルキーワードを持つよりも、ハッシュを使用できます.
hset bug:12339 severity 3
hset bug:12339 priority 1
hset bug:12339 details "{id: 12339, ....}"

hset bug:1382 severity 2
hset bug:1382 priority 2
hset bug:1382 details "{id: 1382, ....}"

hset bug:338 severity 5
hset bug:338 priority 3
hset bug:338 details "{id: 338, ....}"

hset bug:9338 severity 4
hset bug:9338 priority 2
hset bug:9338 details "{id: 9338, ....}"

すべてのことは管理が容易になるだけでなく、severityまたはpriorityでソートできます.また、sortコマンドでどのドメインのデータを取得するかを教えてくれます.
sort watch:leto by bug:*->priority get bug:*->details

同じ値の代替が現れたが、Redisは->シンボルを識別し、ハッシュで指定されたドメインを表示することもできる.getパラメータも含まれており、ここでは値の代替やドメインの表示を行い、Bugの詳細(detailsドメインのデータ)を取得します.
大きな集合の場合、sortコマンドの実行が遅くなる可能性があります.良いニュースは、sortコマンドの出力を格納することです.
sort watch:leto by bug:*->priority get bug:*->details store watch_by_priority:leto

私たちが見たexpirationコマンドを使用して、sortコマンドのstore能力を組み合わせて、これは素晴らしい組み合わせです.

小結


この章では、主に非特定のデータ構造に関連付けられたコマンドに注目します.他のことと同じように、それらの使用は状況によって異なります.プログラムやプロパティを構築する場合、使用期間、パブリケーション、サブスクリプション、ソートなどの機能は使用されない場合があります.しかし、これらの機能の存在を知るのは良いです.そして、私たちもいくつかの命令に触れただけです.さらに多くのコマンドがあります.この本を消化して理解したら、完全なコマンドリストを参照する価値があります.
\clearpage