Redisデータベース入門(2)

		第九章Redis集群

1. リレーショナル データベースと非リレーショナル データベース
1.1 リレーショナル データベース
1) リレーショナル モデルに基づいて作成され、一般にレコード指向の構造化データベース
2) Oracle、MySQL、SQL Server、Microsoft Access、DB2 などが含まれます。

1.2 非リレーショナル データベース
1) 主流のリレーショナル データベース以外のデータベースは非リレーショナルとみなされます。

NoSQL は一般に非リレーショナル データベースを指します。NoSQL は Not-Only SQL であり、リレーショナル データベースを補完するのに適しています。インターネット Web2.0 Web サイトの台頭により、非リレーショナル データベースは現在非常に人気のある新しい分野となり、非リレーショナル データベース製品は非常に急速に開発されています。従来のリレーショナル データベースは、Web2.0 Web サイト、特に超大規模で同時実行性の高い SNS タイプの Web2.0 の純粋に動的な Web サイトに対応できず、次のような多くの克服できない問題が明らかになりました。

2) Redis、MongBD、Hbase、CouhDB などが含まれます。

2. 非リレーショナル データベースの背景
2.1 高性能 - データベースに対する高い同時読み取りおよび書き込み要件

Web2.0 の Web サイトでは、動的ページを生成し、ユーザーのパーソナライズされた情報に基づいて動的情報をリアルタイムで提供する必要があるため、動的ページの静的技術を使用することは基本的に不可能であるため、データベースの同時負荷は非常に高く、多くの場合数十に達します。 1 秒あたり数千件の読み取りおよび書き込みリクエスト。リレーショナル データベースは、数万件の SQL クエリにはかろうじて耐えることができますが、数万件の SQL 書き込みデータ要求になると、ハードディスク IO は耐えられなくなります。実際、通常の BBS Web サイトでは、Web サイトのオンライン ユーザー状況のリアルタイム統計、人気のある投稿のクリック数の記録、投票集計など、同時書き込みリクエストが頻繁に必要となるため、これはは非常に一般的な要件です。

2.2 大規模ストレージ - 大量のデータの効率的なストレージとアクセスの要件

Facebook、Twitter、Friendfeed などの SNS ウェブサイトでは、毎日大量のユーザー更新が生成されます。Friendfeed を例にとると、1 か月に 2 億 5,000 万件のユーザー更新があります。リレーショナル データベースの場合、2 億 5,000 万件のレコードを持つテーブル内で SQL クエリを実行すると、効率は非常に低いか、耐えられないほどです。もう 1 つの例は、Tencent や Shanda などの大規模な Web サイトのユーザー ログイン システムです。これらの Web サイトには数億のアカウントが存在することが多く、リレーショナル データベースへの対応も困難です。

2.3 高スケーラビリティと高可用性—データベースの高スケーラビリティと高可用性の要件

Web ベースのアーキテクチャの中で、データベースは水平方向に拡張するのが最も困難です。ユーザー数やアプリケーション システムへのアクセス数が日々増加すると、データベースは Web サーバーやアプリ サーバーなどのサーバーを単純に追加することはできません。ハードウェアとサービス ノードは、パフォーマンスと負荷能力をスケールします。24 時間中断のないサービスを提供する必要がある多くの Web サイトでは、ダウンタイムのメンテナンスやデータの移行が必要となるデータベース システムのアップグレードと拡張は非常に困難です。サーバー ノードを継続的に追加してデータベースを拡張できないのはなぜでしょうか?

NoSQL データベースは、大規模なデータ収集と複数のデータ型によってもたらされる課題、特にビッグ データ アプリケーションの問題を解決するために作成されました。

3. Redis の概要
3.1 Redis はメモリに基づいて実行され、キーと値 (キーと値のペア) のストレージ形式を使用して永続性をサポートします。

3.2 メリット
1) データの読み書き速度が非常に速い

Redis はデータをメモリに保存します。コンテンツ アクセス速度が速いため、Redis はインターネット プロジェクトで広く使用されています。Redis にはいくつかの利点があります: アクセス速度が速い。公式には、読み取り速度は 1 秒あたり 300,000 回に達し、書き込み速度は 10 10,000 回です1 秒あたりの回数が最大値であり、具体的な制限はハードウェアによって異なります。

2)豊富なデータ型をサポート

edis は、C 言語で開発されたオープンソースの高性能キー/値データベースです。さまざまなシナリオでのストレージのニーズに適応するために、さまざまなキーと値のデータ型が提供されています。これまで Redis でサポートされているキーと値のデータ型は次のとおりです。

文字列型 ハッシュ型 リスト型 コレクション型

3) データの永続性をサポートします
。つまり、サービスの継続的な提供に影響を与えることなく、メモリ内のデータをハードディスクに非同期で書き込むことができます。

短所: 永続化のサポートには十分ではありません。

したがって、redis は通常、データのメイン データベース ストレージとしては使用されず、通常は従来のリレーショナル データベースと組み合わせて使用​​されます

5) データバックアップのサポート - マスター/スレーブモードでのデータバックアップ

6) 豊富な機能

Redis はキーごとに生存時間を設定でき、その時間が経過するとキーは自動的に削除されるため、この機能と優れたパフォーマンスを組み合わせることで、Redis をキャッシュ システムとして使用できます。Redis はキャッシュ システムとして、データが占有する最大メモリ領域を制限することもでき、データが領域制限に達した後は、一定のルールに従って不要なキーを自動的に削除できます。

Redis のリスト タイプ キーを使用してキューを実装し、読み取りのブロックをサポートできるため、高パフォーマンスの優先キューを簡単に実装できます。Redis は、「パブリッシュ/サブスクライブ」メッセージング モデルもサポートしています。

3.3 Redisの適用シナリオ

キャッシュ (データ クエリ、短い接続、ニュース コンテンツ、製品コンテンツなど)。(最もよく使用される) 分散クラスター アーキテクチャにおけるセッション分離。チャット ルームのオンライン友達リスト。タスクキュー。(フラッシュセール、ラッシュセール、12306など) アプリランキング。ウェブサイトの訪問統計。データの有効期限処理 (ミリ秒単位の精度)

例: Redis のインストールとデプロイメント
実験環境:
1.linux-1 redis サーバー
192.168.10.1

実験手順:

  1. redis のコンパイルとインストール
    [root@localhost ~]# tar xf redis-3.2.9.tar.gz -C /usr/src

[root@localhost ~]# cd /usr/src/redis-3.2.9/

[root@localhost redis-3.2.9]# ls

00-RELEASENOTES runtest テストのインストール
バグ Makefile runtest-cluster utils
マニフェストへの貢献 runtest-sentinel
README.md のコピー Sentinel.conf
deps redis.conf src

ソース パッケージには Makefile が用意されており、直接コンパイルしてインストールできます
[root@localhost redis-3.2.9]# make

[root@localhost redis-3.2.9]# make install

インストール中にデフォルトのパスを変更する必要がある場合は、このコマンドを使用します; make prefix=installation path install

上記はバイナリ ファイルのみをインストールし、起動スクリプトや構成ファイルはインストールしません。関連するスクリプトを実行して、

[root@localhost redis-3.2.9]# cd /usr/src/redis-3.2.9/utils/

[root@localhost utils]# ls

build-static-symbols.tcl lru
cluster_fail_time.tcl redis-copy.rb
crash_rdb.c redis_init_script
create-cluster redis_init_script.tplgenerate
-command-help.rb redis-sha1.rb
hashtable releasetools
hyperloglogspeed-regression.tcl
install_server.sh whatisdoing .sh

[root@localhost utils]# ./install_server.sh

Redis サービス インストーラーへようこそ
このスクリプトは、実行中の Redis サーバーを簡単にセットアップするのに役立ちます

このインスタンスの Redis ポートを選択してください: [6379] ##デフォルトのリスニング ポートデフォルトの選択
: 6379
Redis 構成ファイル名を選択してください [/etc/redis/6379.conf] ##デフォルトの構成ファイル選択されたデフォルト
- /etc/redis/6379 .conf
Redis ログ ファイル名を選択してください [/var/log/redis_6379.log] ##ログ ファイル選択された
デフォルト - /var/log/redis_6379.log
このインスタンスのデータ ディレクトリを選択してください [/var/lib /redis/6379 ] ##データベース ディレクトリ
選択されたデフォルト - /var/lib/redis/6379
Redis 実行可能パスを選択してください [/usr/local/bin/redis-server] ##コマンドを実行選択された構成
:
ポート: 6379
構成ファイル: /etc/redis/ 6379.conf
ログファイル : /var/log/redis_6379.log
データディレクトリ : /var/lib/redis/6379
実行ファイル : /usr/local/bin/redis-server
Cli 実行ファイル : /usr/local/bin/redis-cli ## 客户端コマンド
これでいいですか? 次に、ENTER を押して続行するか、Ctrl-C を押して中止します。
/tmp/6379.conf をコピーしました =>

[root@localhost utils]# /etc/init.d/redis_6379 start ##サービススクリプトを開始

サービスをインストールしています…
chkconfig に正常に追加されました。
ランレベル 345 に正常に追加されました。
Redis サーバーを開始しています…
インストールは成功しました!

リスニング ポート
[root@localhost utils]# netstat -anpt|grep redis
tcp 0 0 127.0.0.1:6379 0.0.0.0:* LISTEN 4235/redis-server 1 を実行しているサービスを表示します。

サービスの停止、開始、再起動、およびステータスの確認
[root@localhost utils]# /etc/init.d/redis_6379 stop

[root@localhost utils]# /etc/init.d/redis_6379 start

[root@localhost utils]# /etc/init.d/redis_6379 restart

[root@localhost utils]# /etc/init.d/redis_6379 status

Redis メイン構成ファイルを編集します。現在の IP アドレスをバインドします。

[root@localhost ~]# vim /etc/redis/6379.conf

62 行目
バインド 127.0.0.1 192.168.10.1

[root@localhost ~]# /etc/init.d/redis_6379 restart

Redis メイン構成ファイルを表示します
[root@localhost ~]# grep -v “^#” /etc/redis/6379.conf |grep -v “^$”

バインド 127.0.0.1 192.168.10.1

プロテクトモード はい
ポート 6379
tcp-backlog 511
タイムアウト 0
tcp-keepalive 300
デーモン化 はい
監視あり いいえpidfile
/var/run/redis_6379.pid
ログレベル通知
ログファイル /var/log/redis_6379.log
データベース 16
保存 900 1
保存 300 10
保存 60 10000
stop-writes-on-bgsave-error はい
rdbcompression はい
rdbchecksum はい
dbfilename dump.rdb
dir /var/lib/redis/6379スレーブサーブ-失効データ はいスレーブ読み取り
専用はいrepl-diskless-sync いいえrepl-ディスクレス同期遅延 5 repl-disable-tcp-nolay いいえスレーブ優先度 100 appendonly いいえ






appendfilename “appendonly.aof”
appendfsync Everysec
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
aof-load-truncated はい
lua-time-limit 5000
throwlog-log- 10000 より遅い
スローログ最大長 128
レイテンシ監視しきい値 0
通知キースペース イベント ""
ハッシュ最大 ziplist-entries 512
ハッシュ最大 ziplist-value 64
list-max-ziplist-size -2
list-圧縮深度 0
set-max-intset-entries 512
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
hll-sparse-max-bytes 3000
activerehashing はい
client-output-buffer-limit 通常 0 0 0
client-output-buffer-limit スレーブ 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60
hz 10
aof-rewrite-incremental-fsync はい


設定パラメータ
binding: リスニングホストアドレス
port: ポート
デーモン化 yes: デーモンプロセスを有効にする
pidfile: PID ファイルを指定
loglevel Notice: ログレベル
logfile: ログファイルを指定


	redis配置文件详解

1. ネットワークインターフェイス
バインドの監視 127.0.0.1 192.168.10.1

2. 保護モードを有効にするかどうか、デフォルトで有効になります。
1.1 指定されたバインドとパスワード: ローカル アクセスのみ、外部アクセスは拒否されます
。 1.2 未指定のバインドとパスワード: オフにすることをお勧めします。
保護モードなし、はいに設定します。

3. リスニングポート番号。
ポート6379

4.TCP 接続の完了したキューの長さ (3 ウェイ ハンドシェイク完了後)
tcp-backlog 511

5. クライアントがタイムアウトを超えてアイドル状態である場合、サーバーは切断されます。これが 0 の場合、サーバーは
タイムアウト 0 をアクティブに切断しません。

6. ピア ポートに定期的に ack を送信します。ピアのシャットダウンを検出するには、設定値の 2 倍が必要です。
tcp-キープアライブ 300

7. デーモンモード:
デーモン化を有効にする はい

8. Redis デーモンは、upstart および systemd を通じて管理できます。このパラメータは、特定のオペレーティング システムに関連しています。
監督なし

9.redis プロセス ファイル
pidfile /var/run/redis_6379.pid

10. サーバーログのレベルを指定します。レベルには次が含まれます: デバッグ (多くの情報があり、開発やテストに便利)、冗長 (多くの有益な情報が、デバッグ レベルほど多くの情報はありません)、通知 (適切なログ レベル、運用環境に適しています)、警告 (非常に重要な情報のみ)
ログレベルの通知

11. ログ ファイル
logfile /var/log/redis_6379.logを指定します。

12. データベースの数。デフォルトで使用されるデータベースは DB 0
データベース 16


13. データ永続化構成。少なくとも 1 つのキー値が 900 秒 (15 分) 以内に変更された場合、メモリ内のデータをデータベースに書き込みます(その後、データベースの保存永続化を実行します)
save 900 1

300 秒 (5 分) 以内に少なくとも 10 個のキー値が変更される (その後、データベースを保存 – 永続化)
save 300 10

60 秒 (1 分) 以内に少なくとも 10,000 個のキー値が変更される (その後、データベースを保存 – 永続化)
save 60 10000

14. RDB 永続化でエラーが発生した場合、作業を続行します (そうでない場合は no)
stop-writes-on-bgsave-error yes

15. 圧縮された RDB ファイルを使用する RDB ファイルの圧縮では LZF 圧縮アルゴリズムが使用されます はい: 圧縮ですが、ある程度の CPU 消費が必要です。no: 圧縮なし、より多くのディスク容量が必要です

16. rdb ファイルを検証するかどうか。RDB 形式の 5 番目のバージョンからは、CRC64 チェックサムが RDB ファイルの最後に含まれるようになります。これはファイルのフォールト トレランスには適していますが、RDB ファイルを保存するときに約 10% のパフォーマンスが低下するため、高いパフォーマンスを追求する場合は、この構成をオフにすることができます。
rdbチェックサムはい

17.rdb ファイル名
dbfilename dump.rdb

18. データ ディレクトリ。データベースはこのディレクトリに書き込まれます。
RDB および AOF ファイルもこのディレクトリdir /var/lib/redis/6379に書き込まれます。

19. スレーブ ライブラリがホストとの接続を失った場合、またはレプリケーションが進行中の場合、スレーブ ライブラリには 2 つの動作モードがあります。 1) smile-serve-stale-data が yes (デフォルト設定) に設定されている場合、スレーブ ライブラリは引き続きクライアントのリクエストに応えます。2)slave-serve-stale-data が no に設定されている場合、INFO および SLAVOF コマンドを除くすべてのリクエストは、エラー「SYNC with master in progress」を返します。
スレーブサーブ-古いデータはい

20. スレーブ サーバーとして、デフォルトでは読み取り専用 (はい) ですが、書き込みのために NO に変更できます (非推奨)。
スレーブ読み取り専用はい

21. データのコピーにソケットメソッドを使用するかどうか。現在、Redis レプリケーションには、ディスクとソケットの 2 つの方法が提供されています。新しいスレーブが接続された場合、または再接続されたスレーブが部分的に同期できない場合は、完全同期が実行され、マスターは rdb ファイルを生成します。方法は 2 つあります。 ディスク方式は、マスターが rdb ファイルをディスクに保存する新しいプロセスを作成し、ディスク上の rdb ファイルをスレーブに転送します。ソケットはマスターによって作成された新しいプロセスであり、rdb ファイルをソケットの形式でスレーブに直接送信します。ディスクモードでは、RDB を保存するときに、複数のスレーブで RDB ファイルを共有できます。ソケット方式はスレーブを1台ずつ順番にコピーする方式です。ディスク速度が遅く、ネットワーク速度が速い場合は、ソケット方式を使用することをお勧めします。
repl-diskless-sync いいえ

22. ディスクレス レプリケーションの遅延時間を 0 に設定しないでください。レプリケーションが開始されると、ノードは次の RDB 転送まで新しいスレーブからレプリケーション リクエストを受け取りません。したがって、しばらく待って、さらに多くのスレーブが接続されるまで待つことをお勧めします。
repl-ディスクレス同期遅延 5

23. tcp リンクの tcp nolay パラメータのコピーを禁止するかどうかは、yes または no を渡すことができます。デフォルトは no で、tcp nolay を使用します。マスターが「yes」を設定して tcp nolay 設定を無効にすると、データをスレーブにコピーするときにパケット数とネットワーク帯域幅が減少します。ただし、これによりデータ遅延が発生する可能性もあります。デフォルトでは、遅延を小さくすることをお勧めしますが、大量のデータが送信されるシナリオでは、「はい」を選択することをお勧めします。
repl-disable-tcp-nolay いいえ

24. マスターが利用できない場合、Sentinel はスレーブの優先順位に基づいてマスターを選択します。優先順位が最も低いスレーブがマスターとして選出されます。0 に設定すると、選出されません。
スレーブ優先度 100

25. デフォルトでは、redis は RDB 永続性を使用します。これは多くのアプリケーションで十分です。ただし、redis が途中でダウンした場合、数分間のデータ損失が発生する可能性があります。永続化は保存戦略に従って実行されます。追加のみファイルは、より優れた永続性特性を提供できるもう 1 つの永続化方法です。Redis は書き込まれた各データを受信後、appendonly.aof ファイルに書き込みます。Redis を起動するたびに、まずこのファイルのデータをメモリに読み込み、最初に RDB ファイルを無視します。
追加のみいいえ

26. aofファイル名
appendfilename「appendonly.aof」

27. #aof 永続化戦略構成
#no は、fsync が実行されないことを意味し、オペレーティング システムはデータがディスクに同期されることを保証します。これが最速です。
#always は、データがディスクに確実に同期されるように、書き込みごとに fsync が実行されることを意味します。
#everysec は fsync を毎秒実行することを意味します。これにより、1 秒のデータが失われる可能性があります。
毎秒appendfsync

28. AOFでRDBファイルの書き換えや書き込みを行う場合、大量のIOが発生しますが、このときeverysecやalwaysのAOFモードではfsyncを実行すると長時間のブロッキングが発生します。 on-rewrite フィールドは に設定されます。デフォルト設定は no です。アプリケーションに高い遅延要件がある場合は、このフィールドを [はい] に設定できます。そうでない場合は、永続化機能にとってより安全な選択である [いいえ] に設定します。これを「yes」に設定すると、再書き込み中に新しい書き込み操作が fsyncd されず、一時的にメモリーに保管され、再書き込みが完了した後に書き込まれます。デフォルトは「no」で、「yes」を推奨します。Linux のデフォルトの fsync ポリシーは 30 秒です。30 秒間のデータが失われる可能性があります。
no-appendfsync-on-rewrite いいえ

29.aof は設定を自動的に書き換えます。現在の aof ファイル サイズが、最後に書き換えられた aof ファイル サイズのパーセンテージを超えると、書き換えられます。つまり、aof ファイルが特定のサイズに達すると、Redis は bgrewriteaof を呼び出してログ ファイルを書き換えることができます。現在の AOF ファイル サイズが、前回のログ書き換えで取得した AOF ファイルのサイズ (100 に設定) の 2 倍になると、新しいログ書き換えプロセスが自動的に開始されます。
auto-aof-rewrite-percentage 100

30.合意されたパーセンテージに達してもサイズがまだ小さい場合に
auto-aof-rewrite-min-size 64mbに書き換える必要がないように、書き換えが許可される aof ファイルの最小サイズを設定します。

31. aof ファイルは最後に不完全になる可能性があります。redis が起動すると、aof ファイルのデータがメモリにロードされます。特に ext4 ファイル システムが data=owned オプションを追加していない場合、redis が配置されているホスト オペレーティング システムがダウンした後に再起動が発生することがあります (redis のダウンタイムや異常終了によって末尾不完全現象が発生することはありません)。この現象が発生した場合、 Redis を終了させるか、可能な限り多くのデータをインポートするかを選択できます。「はい」を選択すると、切り詰められた aof ファイルがインポートされるときに、ログが自動的にクライアントにポストされてロードされます。「いいえ」の場合、ユーザーは手動で redis-check-aof を実行して AOF ファイルを修復する必要があります。
aof-load-truncated はい

32. 最大時間制限 (ミリ秒) に達すると、redis はログを記録し、エラーを返します。スクリプトが最大制限時間を超えたとき。SCRIPT KILL と SHUTDOWN NOSAVE のみ使用できます。最初のものは、書き込みコマンドを調整していないものを強制終了する可能性があります。write が呼び出された場合は、2 番目のコマンドでのみ強制終了できます。

ルア時間制限 5000

33. Slowlog は、redis 操作中に比較的遅いコマンドの実行にかかる時間を記録するために使用されます。コマンドの実行が指定時間を超えた場合、スローログに記録されますが、スローログはメモリ上に保存されるため、I/O操作は発生しません。実行時間がslowlog-log-slower-thanよりも長いリクエストはslowlogに記録されます。単位はマイクロ秒なので、1000000は1秒です
slowlog-log-slower-than10000

34. クエリログの長さが遅い。新しいコマンドがログに書き込まれると、最も古いレコードが削除されます。この長さに制限はありません。十分なメモリがある限り。SLOWLOG RESET を通じてメモリを解放できます。
スローログ最大レン 128

35. 遅延監視機能は、redis の比較的遅い操作を監視するために使用されます。LATENCY を使用して、コマンドの実行時に Redis インスタンスの時間のかかるグラフを出力します。以下に設定した値以上の操作のみが記録されます。0 の場合、モニタリングはオフになります。遅延監視機能はデフォルトではオフになっていますが、オンにする必要がある場合は、CONFIG SET コマンドで動的に設定することもできます。
遅延監視しきい値 0

36. キースペース通知を使用すると、クライアントはチャネルまたはスキーマをサブスクライブすることで、何らかの方法で Redis データ セットを変更するイベントを受信できます。デフォルト設定では、この機能はオフになっています。
通知キースペースイベント ""

37. データ量が 512 以下の場合は ziplist を使用し、データ量が 512 を超える場合は hash hash
hash-max-ziplist-entries 512を使用します。

38. 値のサイズが 64 以下の場合は ziplist を使用し、値のサイズが 64 より大きい場合はハッシュを使用します。
ハッシュ最大ジップリスト値 64

リスト最大ジップリストサイズ -2

リスト圧縮深度 0

set-max-intset-entries 512

zset-max-ziplist-entries 128

zset-max-ziplist-value 64

hll-sparse-max-bytes 3000

45.Redis は、100 ミリ秒ごとに 1 ミリ秒の CPU 時間を使用して Redis ハッシュ テーブルを再ハッシュするため、メモリ使用量を削減できます。使用シナリオに非常に厳密なリアルタイム要件があり、Redis のリクエストにおける 2 ミリ秒の遅延を時々受け入れることができない場合は、これを no に構成します。このような厳格なリアルタイム要件がない場合は、これを [はい] に設定して、できるだけ早くメモリを解放できます。
アクティブ再ハッシュはい

46. クライアント出力バッファリングを制限すると、サーバーからデータを読み取っていないクライアントを強制的に切断したり、送信速度が遅いクライアントを強制的にシャットダウンしたりするために使用できます。
#通常のクライアントの場合、最初の 0 はハード リミットをキャンセルすることを意味し、2 番目の 0 と 3 番目の 0 はソフト リミットをキャンセルすることを意味します。通常のクライアントは、要求なしにデータを受信しないため、デフォルトで制限をキャンセルします。
クライアント出力バッファ制限 通常 0 0 0

47. スレーブ クライアントおよび MONITER クライアントの場合、クライアント出力バッファが 256mb を超えるか、60 秒間で 64mb を超える場合、サーバーはクライアントを直ちに切断します。
クライアント出力バッファ制限スレーブ 256MB 64MB 60

48. pubsub クライアントの場合、クライアント出力バッファーが 32mb を超えるか、60 秒間で 8mb を超えると、サーバーは直ちにクライアントを切断します。
クライアント出力バッファ制限 pubsub 32mb 8mb 60

49. Redis 実行タスクの頻度は、1 秒を Hz で割ったものです。
10Hz

50. aof の再書き込み中に、aof-rewrite-incremental-fsync スイッチがオンになっている場合、システムは 32MB ごとに fsync を実行します。これは、過度の遅延のスパイクを避けるためにファイルをディスクに書き込む場合に役立ちます。
aof-rewrite-incremental-fsync はい

2.Redisコマンドツール

[root@localhost ~]# ls /usr/local/bin/
redis-benchmark redis-check-rdb redis-sentinel
redis-check-aof redis-cli redis-server


redis-benchmark は、ローカル マシン上の Redis の動作効率を検出するために使用されます。

redis-check-rdb は RDB 永続ファイルを修復します

redis-sentinel redis-server のソフト接続
redis-check-aof は AOF 永続ファイルを修復します

redis-cli redis コマンドライン ツール
redis-server redis を起動するためのツール


1) redis-cli コマンドラインツール
データベース環境で、コマンド ヘルプを取得します。
help @: 進行中のコマンドのリストを取得します。 help
: 特定のコマンドのヘルプを取得します
。 help: 使用可能なヘルプ トピックのリストを取得します。

ローカル Redis データベースに接続します
[root@localhost ~]# redis-cli
127.0.0.1:6379> ping ##redis サービスが開始されているかどうかを検出します
PONG
127.0.0.1:6379> exit

リモート アクセス Redis データベース
-h リモート ホスト
-p サービス ポート
-a ユーザー パスワード

[root@localhost ~]# redis-cli -h 192.168.10.1 -p 6379
192.168.10.1:6379> info ##サービス統計の表示

192.168.10.1:6379> help @list ##リスト データ型に関連するすべてのコマンドを表示

192.168.10.1:6379> help set ##set コマンドのヘルプ情報を表示する

2) redis-benchmark テスト ツール – サービスのパフォーマンスを効果的にテストし
、M 個のリクエストを同時に発行する N 個のクライアントをシミュレートできます。(Apache ab プログラムに似ています)

使用法 redis-benchmark [-h ][-p ] [-c ][-n ]> [-k ]

オプション:

オプションの説明
-h ホスト名 (デフォルト 127.0.0.1)
-p ホスト ポート (デフォルト 6379)
-s UNIX ソケット (-h -p で設定した内容を上書きします)
-a パスワード (パスワード エラーなどのエラーは直接保護されません)ただし、エラーが保証されるのは動作中のみです。このとき、RedisのAUTHコマンドを使用して再認証することができます)
-c 同時クライアント数(デフォルトは50)
-n クライアントリクエストの総数(デフォルト)は 100000)
-d SET/GET を使用してデータのバイト サイズを追加します (デフォルトは 2)
-dbnum テスト用のデータベースを選択します (デフォルトは 0)
-k クライアントがキープアライブを使用するかどうか。1 は使用することを意味し、0 は使用しないことを意味します、(デフォルトは 1)
-r SET/GET/ を使用します。 INCR コマンドはデータ キーを追加し、SADD はランダム データを追加します。keyspacelen は追加するキーの数を指定します。 -P 各リクエスト パイプラインのデータ量 (デフォルトは
1、パイプラインなし)
- q redis-benchmark の 1 秒あたりのリクエスト情報のみを表示します
–csv 後続の処理を容易にするために結果を csv 形式で出力します
-l ループ テスト
-t 指定されたコマンドのベンチマークを実行できます
-I アイドル モードは、N 個のアイドル接続のみを開いて待機します。

100 の同時接続と 100000 のリクエストを Redis サーバーに送信
[root@localhost ~]# redis-benchmark -h 192.168.10.1 -p 6379 -c 100 -n 100000

====== PING_INLINE ======
100,000 リクエストが 0.79 秒で完了
100 並列クライアント
3 バイト ペイロード キープ
アライブ: 1
……………………

====== MSET (10 キー) ====== 概要情報

100,000 リクエストは 1.1 秒で完了
100,000 リクエストは 1.10 秒で完了

100 の同時接続統計
100 の並列クライアント
3 バイトのペイロード キープ
アライブ: 1

85.82% <= 1 ミリ秒 (ミリ秒)
99.49% <= 2 ミリ秒
99.99% <= 3 ミリ秒
100.00% <= 3 ミリ秒
90744.10 リクエスト/秒 90774 リクエスト/秒

サイズ 100B のデータ パケットへのアクセスのパフォーマンスをテストする
[root@localhost ~]# redis-benchmark -h 192.168.10.1 -p 6379 -q -d 100

set および lpush 操作中にこのマシン上の Redis サービスのパフォーマンスをテストします
[root@localhost ~]# redis-benchmark -t set,lpush -n 100000 -q

bullBoolean

3) Redisデータベース共通コマンド
set:store data
get:データ取得

キー関連コマンド key
、exists、del、type、rename、renamenx、dbsize

キーと値のキーと値のペアのデータ保存形式

set データを格納します set key value
get データを取得します get key

[root@localhost ~]# redis-cli

現在のデータベースにキーを Teacher として保存し、値を ly
set Teacher lyとして保存します。

保存したばかりのデータを表示して
教師を取得

その他のデータ管理コマンド

  1. キー関連のコマンド

1)keys - ルール (*?) に一致するキー値のリストを取得します。

*---- 任意の文字を表しますか
? — 文字を表します

セット k1 1
セット k2 2
セット k3 3
セット v1 4
セット v5 5

現在のデータベース内のすべてのキーを表示する

キー *

セット v22 5

v で始まるデータを表示する

キー v*

v で始まり、その後に任意の文字が続くデータを表示する

キーv?

v で始まり、その後に任意の 2 文字が続くデータを表示する

キーv??

2)exists - キー値が存在するかどうかを判断します。

教師キーの値が
整数で存在するかどうかを判断します。戻り値は 1 (存在することを意味します)、0 の場合は存在しないことを意味します。

先生が存在します

お茶が存在します

3) del - 現在のデータベースの指定されたキーを削除します。

キー *

デルv5

v5を入手

4) type - キーに対応する値の型を取得します。

タイプk1

string - 文字列型

5)名前を変更名前を変更

ソースキーの名前を変更 ターゲットキー

## 重要なデータの上書きを防ぐため、実際の環境では、対象のキー (存在するかどうかに関係なく) を直接上書きします。まず、exists はターゲットが存在するかどうかを確認し、次に rename を実行するかどうかを決定します。

キー v*

v22 v2 の名前を変更

キー v*

v1を取得

v2を取得

v1 v2 の名前を変更

v1を取得

v2を取得

6)renamenx-----既存のキーの名前を変更し、新しい名前が存在するかどうかを確認します。ターゲットキーがすでに存在する場合は、名前を変更しないでください

ソースキーのターゲットキーの名前を変更する

キー *

先生を呼ぶ

v2を取得

renamenx v2 教師

キー *

先生を呼ぶ

v2を取得

7)dbsize - 現在のデータベース内のキーの数を表示します。

DBサイズ

2. 複数のデータベースに共通のコマンド

Redis にはデフォルトで 16 のデータベースがあります (0-15)
*デフォルトの接続データベースはシリアル番号 0
*データベースのシリアル番号を選択 ---- データベース切り替えコマンド

複数のデータベース間の切り替え

1) 選択 – シリアル番号 10 のデータベースに切り替えます

10を選択してください

15を選択してください

0を選択してください

2) 複数のデータベース間でデータを移動する

127.0.0.1:6379[15]> select 0
OK
127.0.0.1:6379> set k1 100
OK
127.0.0.1:6379> get k1
“100”
127.0.0.1:6379> select 1
OK
127.0.0.1:6379[1] > k1
(nil)を取得します

複数のデータベース間でコマンドを移動する

127.0.0.1:6379[1]> 0 を選択
OK
127.0.0.1:6379> k1
“100”を取得

キー値 k1 をデータベース 1
127.0.0.1:6379 に移動> move k1 1
(整数) 1
127.0.0.1:6379> get k1
(nil)
127.0.0.1:6379> select 1
OK
127.0.0.1:6379[1]> get k1
「100」

データベース内のデータを消去する

現在のデータベースのデータをクリアしますflushdb

127.0.0.1:6379[1]> キー *

  1. 「k1」

127.0.0.1:6379[1]>フラッシュdb
OK

127.0.0.1:6379[1]> キー *
(空のリストまたはセット)

すべてのデータベースのデータをフラッシュオールでクリアします。慎重に使用してください。

127.0.0.1:6379> キー *

  1. 「カウンター: rand_int
  2. 「キー: rand_int
  3. "私のリスト"
  4. 「v2」
  5. "教師"
  6. 「k2」
  7. 「k3」
  8. “k4”
    127.0.0.1:6379> フラッシュオール
    OK
    127.0.0.1:6379> キー *
    (空のリストまたはセット)

Redis Cluster の原則
Redis Cluster のアーキテクチャ
Redis Cluster は仮想スロット パーティショニングを使用して、アルゴリズムに従ってすべてのデータを 0 ~ 16383 の整数スロットにマッピングします。Redis Cluster はセンター
レス構造です。
各ノードはデータとクラスタ全体のステータスを保存します。
クラスタの役割
マスター:スロットはマスター間で割り当てられます
スレーブ: スレーブは指定されたマスターにデータを同期します
クラスター ノードによって使用される TCP ポート 6379 は
クライアント接続に使用されます
ポート 16379 はクラスター バスに使用されます
+

例:
Redis クラスターを 1 台の PC サーバーにデプロイし、異なる TCP ポートを介して複数のインスタンスを起動し、複数の独立した PC をシミュレートしてクラスターを形成します。

アイデア: マルチインスタンス構成ファイルを保存するために、ルート ディレクトリに新しい /redis_cluster ディレクトリを作成します。ここでは、6 つの TCP ポートを使用して、合計 6 つの構成ファイル 6001 ~ 6006 を書き込みます。これらの 6 つの構成ファイルを使用して、インスタンスを起動してビルドしますRedis クラスター。

クラスターを形成するには少なくとも 6 つのインスタンスが必要です。3 つのマスターと 3 つのスレーブが自動的に割り当てられます

[root@localhost ~]# /etc/init.d/redis_6379 stop

クラスター ディレクトリを作成します
[root@localhost ~]# mkdir -p /redis_cluster/{6001…6006}

[root@localhost ~]# ll /redis_cluster/

構成ファイルを編集します (6001 ~ 6006 のマークが付いた行をそれぞれ変更します)
[root@localhost ~]# vim redis.conf

##インスタンスの IP アドレス、デフォルトは 127.0.0.1 です。実際の状況に応じて変更してください。クラスタ ノードは、IP アドレスが相互に通信できることを確認する必要があり、ネットワーク レベルは、対応する IP アドレスのアクセス権を解放する必要があります。ポート
バインド192.168.10.1
保護モードはい

##6001-6006
##ポート番号。異なるホストおよび異なるインスタンスの
ポート 6001 をシミュレートするために使用されます。

tcp-バックログ 511
タイムアウト 0
tcp-キープアライブ 300

##バックグラウンドでの Redis の実行を許可する
デーモン化
はい監視ありいいえ

##6001-6006##pidfile ファイル、
インスタンスごとに 1 つの pidfile /redis_cluster/redis_6001.pid

ログレベルの通知

##6001-6006
ログファイル /redis_cluster/6001/redis_6001.log

データベース 16
保存 900 1
保存 300 10
保存 60 10000
stop-writes-on-bgsave-error はい
rdbcompression はい
rdbchecksum はい
dbfilename dump.rdb

##6001-6006##各インスタンスにはディレクトリ
dir /redis_cluster/6001があります。

slave-serve-stale-data はい、
slave-read-only はい、
repl-diskless-sync いいえ、
repl-diskless-sync-lay 5
repl-disable-tcp-nolay いいえ、
スレーブ優先度 100
appendonly いいえ、
appendfilename “appendonly.aof”
appendfsync 毎秒
no-appendfsync-on-rewrite いいえ
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
aof-load-truncated はい
lua-time-limit 5000

##クラスタを有効にする クラスタ
クラスタ有効 はい

##6001-6006##クラスター構成ファイル、インスタンスごとに 1 つの
クラスター構成ファイル names-6001.conf

##リクエスト タイムアウト、デフォルトは 15 秒です。ネットワークの状況に応じて設定を変更できます。cluster
-node-timeout 15000
throwlog-log-slower-than 10000
throwlog-max-len 128
latency-monitor-threshold 0
Notice-keyspace -events ""
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
list-max-ziplist-size -2
list-compress- Depth 0
set-max-intset-entries 512
zset-max-ziplist-entries 128
zset-max -ziplist-value 64
hll-sparse-max-bytes 3000
activerehashing はい
client-output-buffer-limit 通常 0 0 0
client-output-buffer-limit スレーブ 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8MB 60
Hz 10
aof-rewrite-incremental-fsync はい

構成ファイルを各インスタンスにコピーします
[root@localhost ~]# cp redis.conf /redis_cluster/6001 [root@localhost ~]
# cp redis.conf /redis_cluster/6002 [
root@localhost ~]# cp redis.conf /redis_cluster /6003
[root@localhost ~]# cp redis.conf /redis_cluster/6004 [
root@localhost ~]# cp redis.conf /redis_cluster/6005
[root@localhost ~]# cp redis.conf /redis_cluster/6006

ツリー表示コマンド
[root@localhost ~]# yum -y installtree
設定ファイルの要件に従って各インスタンスの設定ファイルを編集します

[root@localhost ~]# ツリー /redis_cluster/

シェル コマンド 三銃士 grep awk sed

[root@localhost ~]# sed -i 's/6001/6002/g' /redis_cluster/6002/redis.conf

[root@localhost ~]# sed -i 's/6001/6003/g' /redis_cluster/6003/redis.conf

[root@localhost ~]# sed -i 's/6001/6004/g' /redis_cluster/6004/redis.conf

[root@localhost ~]# sed -i 's/6001/6005/g' /redis_cluster/6005/redis.conf

[root@localhost ~]# sed -i 's/6001/6006/g' /redis_cluster/6006/redis.conf

6 つのインスタンスを開始
[root@localhost ~]# redis-server /redis_cluster/6001/redis.conf

[root@localhost ~]# netstat -anput |grep redis

[root@localhost ~]# redis-server /redis_cluster/6002/redis.conf

[root@localhost ~]# redis-server /redis_cluster/6003/redis.conf

[root@localhost ~]# redis-server /redis_cluster/6004/redis.conf

[root@localhost ~]# redis-server /redis_cluster/6005/redis.conf

[root@localhost ~]# redis-server /redis_cluster/6006/redis.conf

redis のプロセスとポートを確認する
[root@localhost ~]# ps -ef |grep redis|grep cluster

[root@localhost ~]# netstat -anput |grep redis

[root@localhost src]# yum -y インストール ツリー

[root@localhost src]# ツリー /redis_cluster/

Ruby環境-redis-trib.rbスクリプトを構成する

Redis は 3.0 からクラスター機能のサポートを開始し、公式は Redis クラスターを管理するツール – Ruby スクリプト: redis-trib.rb を開始しました。

このスクリプトは Redis ソース コードの SRC ディレクトリに統合されているため、このスクリプトを使用して Redis クラスターを作成、構成、管理する前に、システムに Ruby 環境をインストールして構成する必要があります。

Ruby ツールをインストール
[root@localhost ~]# yum -y install Ruby Rubygems

ソフトウェア redis-3.2.0.gem をアップロードする必要があります

[root@localhost ~]# ll

-rw-r–r-- 1 ルート root 71168 12 月 19 日 16:47 redis-3.2.0.gem

[root@localhost ~]# gem install redis --version 3.2.0

[root@localhost ~]# cd /usr/src/redis-3.2.9/src/

スクリプトを使用して Redis クラスターをインストールします
[root@localhost ~]# ./redis-trib.rb create --replicas 1 192.168.10.1:6001 192.168.10.1:6002 192.168.10.1:6003 192.168.10.1:6004 192.168.10.1:60 05 192.168 .10.1:6006

[root@localhost src]# ツリー /redis_cluster/

クラスターのステータスを確認する
[root@localhost ~]# ./redis-trib.rb check 192.168.10.1:6001

Redis クラスターにログインし、キー値 test
-h host
-p port
-c を設定してクラスター モードをアクティブにします。

[root@localhost ~]# redis-cli -h 192.168.10.1 -p 6001 -c

192.168.10.1:6001> 教師 ly を設定
-> 192.168.10.1:6003 にあるスロット [12541] にリダイレクトされました
OK
192.168.10.1:6003> 教師
「ly」を取得
192.168.10.1:6003> 終了

結論: クラスターのインスタンスにログインするとき、キー値を作成するときに、キー値はスロットに従って割り当てられた他のサーバーにリダイレクトされます。


	trib.rb脚本使用帮助

./redis-trib.rb help
2 使用法: redis-trib <arguments …>
3
4 create host1:port1 … hostN:portN ##クラスターの作成
5 --replicas ##replicas パラメーターは、現在クラスターに存在するスレーブの数を指定します。 redis クラスターが作成されました。ノード
6 check host:port ##クラスターをチェックし、ノードの可用性を確認します
7 info host:port ##クラスター情報の表示、ノード情報
8 fix host:port ##クラスターを修復
9 --timeout
10 reshard host:port ##クラスターをオンラインで A から B に移行します
11 --from
12 --to
13 --slots
14 --yes
15 --timeout
16 --pipeline
17 rebalance host:port ##バランスクラスターノードスロット番号
18 --ウェイト
19 --auto-weights
20 --use-empty-masters
21 --timeout
22 --simulate
23 --pipeline
24 --threshold
25 add-node new_host:new_portexisting_host:existing_port ##新しいクラスター ノードをオンラインで追加
26 --slave
27 --master-id
28 del-node host:port node_id ##クラスター ノードをオンラインで削除
29 set-timeout host:port milliseconds # #Redis クラスター ノードのハートビート タイムアウト パラメーター設定、デフォルトは 15 秒です
30 call host:port command arg arg ... arg ##コマンドをすべてのノードで同時に実行できるようにします。このパラメーターは注意して使用してください 31
import host:port # #外部 Redis ノード データのインポート Cluster
32 --from
33 --copy
34 --replace
35 help (このヘルプを表示) ##スクリプトの使用方法のヘルプを表示
36
37 check、fix、reshard、del-node、set-timeout については、次のことができます。クラスター内の稼働ノードのホストとポートを指定します。

おすすめ

転載: blog.csdn.net/m0_57207884/article/details/119669477