Redis(三)高級応用


(1).Redisデータのバックアップとリカバリ.Redis SAVEコマンドは、現在のデータベースのバックアップを作成します.基本文法はSAVE
192.168.180.23:6379> save
OK

このコマンドはredisインストールディレクトリにdumpを作成します.rdbファイル.
[root@localhost redis-3.2.9]# ls
00-RELEASENOTES  dump.rdb         redis.conf        src

データを復元します.データのリカバリが必要な場合は、バックアップファイル(dump.rdb)をredisインストールディレクトリに移動し、サービスを開始するだけです.redisディレクトリを取得するには、CONFIGコマンドを使用します.次のようにします.
192.168.180.23:6379> config get dir
1) "dir"
2) "/root"

config get dirはredisデータのディレクトリ/rootを取得し、リカバリするにはバックアップファイル/root/dumpだけを必要とする.rdbはredisインストールディレクトリに移動し、サービスを開始すればよい.redisバックアップファイルの作成は、バックグラウンドで実行されるコマンドBGSAVEを使用することもできます.
127.0.0.1:6379> bgsave
Background saving started

(2)redis安全.Redisセキュリティを保護するには、プロファイルにパスワードを設定する必要があります.
127.0.0.1:6379> config get requirepass
1) "requirepass"
2) ""

デフォルトでは、redisアクセスのパスワードは設定されていません.設定する場合は、次のコマンドを使用します.
192.168.180.23:6379> config set requirepass "redis123"
OK
192.168.180.23:6379> config get requirepass
1) "requirepass"
2) "redis123"

パスワードを設定と、認証なしにクライアントがコマンドを実行すると、NOAUTH Authentication requiredが返されます.に表示されます.したがって、クライアントはAUTHコマンドを使用して検証する必要があります.
(3)redis性能テスト.Redisパフォーマンステストは、複数のコマンドを同時に実行することによって実現されます.構文:redis-benchmark[option][option value]
[root@localhost src]# ./redis-benchmark -n 10000
====== PING_INLINE ======
  10000 requests completed in 0.11 seconds
  50 parallel clients
  3 bytes payload
  keep alive: 1
100.00% <= 0 milliseconds
88495.58 requests per second
====== PING_BULK ======
  10000 requests completed in 0.11 seconds
  50 parallel clients
  3 bytes payload
  keep alive: 1
100.00% <= 0 milliseconds
89285.71 requests per second
====== SET ======
  10000 requests completed in 0.11 seconds
  50 parallel clients
  3 bytes payload
  keep alive: 1
100.00% <= 0 milliseconds
90090.09 requests per second
====== GET ======
  10000 requests completed in 0.10 seconds
  50 parallel clients
  3 bytes payload
  keep alive: 1
100.00% <= 0 milliseconds
98039.22 requests per second
====== INCR ======
  10000 requests completed in 0.10 seconds
  50 parallel clients
  3 bytes payload
  keep alive: 1
100.00% <= 0 milliseconds
95238.10 requests per second

redisパフォーマンステストツールのオプションパラメータは、次のとおりです.
シーケンス番号
オプション
説明
デフォルト
1
-h
サーバホスト名の指定
127.0.0.1
2
-p
サーバポートの指定
6379
3
-s
サーバソケットの指定
4
-c
同時接続数の指定
50
5
-n
リクエスト数の指定
10000
6
-d
SET/GET値のデータサイズをバイトで指定
2
7
-k
1=keep alive 0=reconnect
1
8
-r
SET/GET/INCRはランダムキー、SADDはランダム値を使用
9
-P
パイプを介した要求の転送
1
10
-q
強制的にredisを終了します.query/sec値のみ表示
11
--csv
CSV形式で出力
12
-l
ループを生成し、テストを永続的に実行
13
-t
カンマで区切られたテストコマンドのリストのみを実行します.
14
-I
Idleモード.N個のidle接続のみが開き、待機します.
(4)Redis配管.Redisは、要求/応答プロトコルをサポートするTCPサーバです.Redisでは、要求は次の手順で完了します.
  • クライアントは、通常、サーバ応答のためにブロックされた方法でサーバにクエリーを送信し、ソケットから読み出す.
  • サーバは、コマンドを処理し、応答をクライアントに送信する.

  • Redisパイピング技術は、サービス側が応答していない場合に、クライアントがサービス側に要求を送信し続け、最終的にすべてのサービス側の応答を一度に読み出すことができる.
    $(echo -en "PING\r
     SET tutorial redis\r
    GET tutorial\r
    INCR  visitor\r
    INCR visitor\r
    INCR visitor\r
    "; sleep 10) | nc localhost 6379   +PONG  +OK  redis  :1  :2  :3

    上記の例では、PINGコマンドを使用してRedis接続を確認します.ここではtutorialという名前の文字列を設定し、値はredisです.次にキー値を求め,visitor数を3回増やした.その結果、すべてのコマンドがRedisに一度コミットされ、Redisは1つのステップですべてのコマンドの出力を提供することがわかります.パイプ技術の最も顕著な利点はredisサービスの性能を向上させることである.
    (5)Redisパーティション.
    パーティション化は、複数のRedisインスタンスにデータを分割する処理プロセスであるため、各インスタンスはkeyのサブセットのみを保存する
    パーティション化のメリット
  • 複数のコンピュータメモリの合計値を使用することで、より大きなデータベースを構築できます.
  • マルチコアと複数のコンピュータを通じて、計算能力を拡張することができます.複数のコンピュータとネットワークアダプタにより、ネットワーク帯域幅を拡張できます.

  • パーティション不足
  • redisのいくつかの特性はパーティションの面でよく表現されていない:
  • に関連する複数のkeyの動作は、通常、サポートされない.たとえば、2つのsetが異なるredisインスタンスにマッピングされると、この2つのsetに対して交差操作を実行できません.
  • 複数のkeyに関連するredisトランザクションは使用できません.
  • パーティションを使用する場合、データ処理は複雑です.たとえば、複数のrdb/aofファイルを処理し、複数のインスタンスとホストから永続化ファイルをバックアップする必要があります.
  • 容量の増加または削除も複雑です.redisクラスタの多くは、実行時にノードの透過的なデータ・バランシングを追加、削除する能力をサポートしていますが、クライアント・パーティション、エージェントなどの他のシステムではサポートされていません.しかし、preshardingという技術はこれに役立つ.
  • パーティションタイプ
  • Redisには2つのタイプのパーティションがあります.4つのRedisインスタンスR 0,R 1,R 2,R 3と、user:1,user:2のようなユーザを表す複数のkeyとを仮定すると、このkeyがどのインスタンスに格納されるかを選択するには、既定のkeyに対して様々な方法がある.すなわち、あるkeyをあるRedisサービスにマッピングするシステムは異なる.
    レンジパーティション
    最も単純なパーティション方式は、特定のRedisインスタンスに一定の範囲のオブジェクトをマッピングすることです.
    例えば、IDが0から10000までのユーザはインスタンスR 0に保存され、IDが10001から20000までのユーザはR 1に保存される.
    この方法は実行可能であり、実際には、インスタンスへの区間範囲のマッピングテーブルが不足している.このテーブルを管理するには、さまざまなオブジェクトのマッピングテーブルが必要です.通常、Redisにとって良い方法ではありません.
    ハッシュパーティション
    もう1つのパーティション化方法はhashパーティションです.これは任意のkeyに適用され、object_である必要はありません.name:この形式は、以下に説明するように簡単です.
  • は、crc 32 hash関数のようなhash関数を使用してkeyを数値に変換する.key foobarに対してcrc 32(foobar)を実行すると、93024922のような整数が出力されます.
  • はこの整数をモデル化し、0〜3の間の数値に変換することで、この整数を4つのRedisインスタンスの1つにマッピングすることができる.93024922%4=2、すなわちkey foobarはR 2インスタンスに格納されるべきである.注:モデリング操作は、通常、複数のプログラミング言語で%オペレータで実現される除去された余剰です.