技術共有

Redis の構成と最適化

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

1. リレーショナル データベースと非リレーショナル データベース

(1) リレーショナルデータベース

リレーショナル データベースは、リレーショナル モデル データベース上に作成され、レコード指向で作成された構造化データベースです。

一般的なリレーショナル データベース: Oracle、MySQL、SQL Server、Microsoft Access、DB2。

(2) 非リレーショナルデータベース

NOSQL=Not Only SQL は、非リレーショナル データベースの一般的な用語です。保存方法、保存構造、使用シナリオに応じて、非リレーショナル データベースと呼ばれます。主流のリレーショナル データベース以外のデータベースを非リレーショナル データベースと呼ぶこともあります。

一般的な非リレーショナル データベース: Redis、MongoDB、Hbase、CouhDB。

2. Redis の基本

(1) Redisの概要

Redis は、C 言語で書かれたオープン ソースの Nosql データベースであり、メモリに基づいて実行され、キーと値 (キーと値のペア) の保存形式を採用しています。ポート番号は 6379 です。

(2) Redisのメリット

  1. データの読み書き速度が速い。
  2. 豊富なデータ型をサポートします。 キーと値、文字列、リスト、ハッシュ、セット、順序付きセット。
  3. データの永続性をサポートします。データはディスクに保存され、再起動後にロードして使用できます。
  4. アトミック。
  5. データのバックアップをサポートします。

3.redisのインストール

1.Redisをインストールする

[root@localhost ~]# systemctl stop ファイアウォールd

[root@localhost ~]# setenforce 0

[root@localhost ~]# yum -y gcc* zlib-develをインストール

[root@localhost ~]#tar xvzf redis-4.0.9.tar.gz

[root@localhost ~]#redis-4.0.9 をインストールします

[root@localhost redis-4.0.9]# 作成

知らせ:

make後にエラーメッセージが生成されますが、

解決:
解決策 1: make MALLOC=libc を使用して、libc 用にコンパイルするメモリ アロケーターを指定します。
解決策 2: make clean && make distclean

[root@localhost redis-4.0.9]# PREFIX=/usr/local/redis をインストールします
[root@localhost utils]# ln -s /usr/local/redis/bin/* /usr/local/bin/

[root@localhost redis-4.0.9]# cd utils/
その中には、install_server.sh は初期化スクリプトです。

[root@localhost utils]# ./install_server.sh
redis実行パス[] /usr/local/redis/bin/redis-serverを選択してください(実行可能パスを指定します)

プロセスとサービスの制御を表示する
[root@localhost utils]# netstat -anpt | grep redis
tcp 0 0 127.0.0.1:6379 0.0.0.0:* LISTEN 5360/redis-server 1
[root@localhost utils]# /etc/init.d/redis_6379 を停止します(redisは閉じられています)
[root@localhost utils]# /etc/init.d/redis_6379 開始(の上)
[root@localhost utils]# /etc/init.d/redis_6379 ステータス (州)

設定パラメータの変更
[root@localhost ~]#vim /etc/redis/6379.conf
127.0.0.1 192.168.10.101 をバインド// リスニングホストアドレス
ポート 6379 //ポート
悪魔化する はい //デーモンプロセスを有効にする
pidファイル /var/run/redis_6379.pid //PIDファイルを指定
ログレベル通知//ログレベル
ログファイル /var/log/redis_6379.log//ログファイルを指定

[root@localhost~]#/etc/init.d/redis_6379 再起動

2.redisコマンドツール

[root@localhost utils]# redis-cli(ローカルログイン)
[root@localhost utils]# redis-cli -h 192.168.10.101 -p 6379(リモートログイン)
192.168.10.101:6379> ピン(検出サービスは正常に動作しています)
ポン

3: redis-ベンチマークテストツール

redis-benchmark は、Redis サービスのパフォーマンスを効果的にテストできる公式の Redis パフォーマンス テスト ツールです。

  • -h: サーバーのホスト名を指定します。
  • -p: サーバーポートを指定します。
  • -s: サーバーソケットを指定します。
  • -c: 同時接続数を指定します。
  • -n: リクエストの数を指定します。
  • -d: SET/GET値のデータサイズをバイト単位で指定します。
  • -k:1=維持、0=再接続;
  • -r: SET/GET/INCR はランダムなキーを使用し、SADD はランダムな値を使用します。
  • -P: パイプ経由で転送<numreq>聞く;
  • -q: Redis を強制終了します。クエリ/秒の値のみが表示されます。
  • --csv: CSV 形式で出力します。
  • -l: ループを生成し、テストを永続的に実行します。
  • -t: テスト コマンドのカンマ区切りリストのみを実行します。
  • -I: アイドルモード。 N 個のアイドル接続のみを開いて待機します。
  • (1) テストリクエストのパフォーマンス

    [root@localhost ~]#redis-benchmark -h 192.168.10.101 -p 6379 -c 100 -n 100000

    述べる:

    -h: サーバーのホスト名を指定します。

  • -p: サーバーポートを指定します。

    -c: 同時接続数を指定します。

    -n: リクエストの数を指定します。

(2) テストアクセス性能

[root@localhost ~]#redis-benchmark -h 192.168.10.101 -p 6379 -q -d 100

述べる:

-h: サーバーのホスト名を指定します。

-p: サーバーポートを指定します。

-d: SET/GET値のデータサイズをバイト単位で指定します。

-q: Redis を強制終了します。クエリ/秒の値のみが表示されます。

  1. 4. Redisデータベースの共通コマンド

set ストア データ コマンド形式 set キー値

get データ取得コマンド形式 get key

(1) キー関連コマンド

1. キーと値のペアを追加する

127.0.0.1:6379&gt; 1 1 を設定
わかりました
127.0.0.1:6379&gt; セット 2 2
わかりました
127.0.0.1:6379&gt; セット 3 3
わかりました

2.データベース内のすべての値を表示します

127.0.0.1:6379&gt; キー *
1) "3"
2) "1"
3) "2"

3. データベース内の v で始まるデータを表示する
127.0.0.1:6379>キー v*

4. データベース内の v で始まるデータを表示します。

127.0.0.1:6379>キーズv?

5.現在のデータベースを表示するには、 始まり以下には任意の 2 桁のデータが含まれます

127.0.0.1:6379>KEYS v??

(2) 存在する

値が存在するかどうかを確認します。

127.0.0.1:6379>存在するf5f5 が存在するかどうかを確認する

(整数) 1 結果は 1 で、f5 キーが存在することを示します。

のように

(整数) 0 結果は 0 で、f5 キーが存在しないことを示します。

(3)デル

デル このコマンドは、指定されたファイルを削除できます。

127.0.0.1:6379> デルv5 データベース内の v5 を削除します

(整数) 1

127.0.0.1:6379>v5 を入手

(ゼロ)

(4)タイプ

使用 タイプ コマンドが取得できる 対応する 価値 値の型

127.0.0.1:6379>タイプk1

述べる:

Redis でサポートされるデータ型

  • String: String は最も単純なタイプで、通常の set および get であり、キー値のキャッシュに使用されます。
  • ハッシュ: ハッシュ アルゴリズム。マップに似た構造。一般に、オブジェクトなどの構造化データを Redis にキャッシュできます。
  • リスト: リストは順序付きリストです。リストを使用して、ファン リスト、記事コメント リストなどのリスト タイプのデータ構造を保存できます。
  • Set: Set は、重複を自動的に削除する順序付けされていないコレクションです。
  • ソートセット: ソートセットは重複排除されていますが、書き込み時にスコアが与えられ、スコアに従って自動的にソートされます。

(5) 名前を変更する

名前を変更する このコマンドは既存のものに対するものです 名前を変更する

実際に使用する場合は、 存在する ターゲットを表示するコマンド が存在する場合は、実行するかどうかを決定します 名前を変更する 重要なデータの上書きを避けるためのコマンドです。

127.0.0.1:6379>名前を v22 v2 に変更 v22 の名前を v2 に変更

わかりました

(6) 名前の変更

名前変更 このコマンドの機能は、既存のファイルを変更することです。 名前の変更を実行し、新しい名前が存在するかどうかを確認します。

使用名前変更 コマンドの名前が変更されると、ターゲットが 存在する場合、名前は変更されません。

(7) DBサイズ

データベースサイズ コマンドの目的は、現在のデータベースを表示することです。 の数。

127.0.0.1:6379> データベースサイズ

(整数) 5

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

(1) 複数データベースの切り替え

レディス 何も変更せずにデフォルトで含まれています 16 データベース、データベース名は数字です 0-15 順番に名前を付ける

(1)シリアル番号に切り替える 10 データベース

127.0.0.1:6379>10を選択

わかりました

(2)シリアル番号に切り替える 15 データベース

127.0.0.1:6379[10]>15を選択

わかりました

(3)シリアル番号に切り替える 0 データベース

127.0.0.1:6379[15]>0を選択

(2) 複数のデータベース間でのデータの移動

127.0.0.1:6379>セットk1 100 データベース 0 に k1 を作成します

わかりました

127.0.0.1:6379>k1を取得

"100"

127.0.0.1:6379>k1 1 を動かす  //データベース 0 の k1 をデータベース 1 に移動します

(整数) 1

127.0.0.1:6379>1を選択   //ターゲットデータベース 1 に切り替えます

わかりました

127.0.0.1:6379[1]>k1を取得   //移動されたデータを表示する

"100"

127.0.0.1:6379[1]> 0を選択

わかりました

127.0.0.1:6379> k1を取得         //k1 の値はデータベース 0 では表示できません

(ゼロ)

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

現在のデータベース データをクリアするには、次を使用します。 フラッシュDB

コマンドの実装。すべてのデータベース データをクリアします。 フラッシュホール コマンドの実装。

6. Redis の永続化

レディス すべてのデータはメモリに保存され、その後非同期的にディスクに随時保存されます。(これはと呼ばれます半永続モード”); すべてのデータ変更を ファイルのみ追加(aof)(これはと呼ばれます完全永続モード”)

なぜなら レディス 永続性が設定されていない場合、すべてのデータはメモリに保存されます。レディス 再起動後、すべてのデータが失われます。したがって、有効にする必要があります レディス 永続化機能はデータをディスクに保存します。 レディス 再起動後、ディスクからデータを回復できます。レディス 永続化のために 2 つのメソッドが提供されています。1 つは次のとおりです。 翻訳データベースRedis データベース 持続性(原則は リードインメモリデータベースレコードの時限ダンプ (ごみ)ディスクへ 翻訳データベース 永続性)、もう 1 つは AOF追加のみ ファイル持続性(原則は リード 操作ログはファイルに追記形式で書き込まれます。

RDBとAOFの違い

ROB は、指定された時間内にデータ スナップショットをディスクに書き込みます。これはフォークのサブプロセスであり、成功すると、以前のファイルが置き換えられ、バイナリ圧縮で保存されます。

AOF は、サーバーのすべての書き込みおよび削除操作をログ形式で記録します。クエリ操作は記録されませんが、テキスト形式で記録されます。

 

RDBとAOFの長所と短所

RDB の利点:

RDB は、特定の時点での Redis データのスナップショットを表すコンパクトな圧縮バイナリ ファイルです。バックアップ、フルコピー、その他のシナリオに非常に適しています。たとえば、6 時間ごとに bgsave バックアップを実行し、災害復旧のために RDB ファイルをリモート マシンまたはファイル システムにコピーします。

データの復旧が早いです。

パフォーマンスを最大化する

高い起動効率

翻訳データベース欠点:

シャットダウン前に保存されなかったデータは失われます。

       RDB は fork 子プロセスを経て完成し、リソースを消費します。

AOF の利点:

データ耐久性が高い

追加モードでは、ダウンタイムがあってもログ ファイルの内容は破壊されません。

データのセキュリティを保護するために、書き換えメカニズムを開始できます。

AOF の欠点:

AOF データの回復速度が遅い

AOFの動作効率が低い

2 つのどちらかを選択する基準:

キャッシュの一貫性を高める代わりに、パフォーマンスをある程度犠牲にします (AOF),

書き込み操作が頻繁に行われる場合は、パフォーマンスの向上と引き換えにバックアップを有効にせず、手動操作を待ちます。 保存 もう一度バックアップを作成してください (翻訳データベース

述べる:

redies が再起動後に永続化ファイルをロードする必要がある場合は、優先度AOFファイルが選択されます。

最初に RDB が有効になってから AOF が有効になり、RDB が最初に永続化された場合、RDB ファイルの内容は AOF によって上書きされます。

7. Redis 永続化構成

(1) RDB永続化構成

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

開ける 6379.conf ファイルの後に検索します 保存, 以下のように構成情報が表示されます。

  • save 900 1: 900 秒 (15 分) 後、少なくとも 1 つのキーが変更された場合、メモリ スナップショットをダンプします。
  • save 300 10: 300 秒 (5 分) 後、少なくとも 10 個のキーが変更された場合は、メモリ スナップショットをダンプします。
  • save 60 10000: 60 秒 (1 分) 後、少なくとも 10000 個のキーが変更された場合、メモリ スナップショットをダンプします。
  • dbfilename dump.rdb: RDB ファイル名 ##254 行目
  • dir /var/lib/redis/6379: RDB ファイルパス ##264 行目
  • rdbcompression yes: ##242行を圧縮するかどうか

(2) AOF永続化設定

存在する レディス 構成ファイルには次の 3 つの同期方法があります。

  • 追加のみ はいAOF 永続性をオンにする (デフォルトは no) ##673 行
  • 追加ファイル名「appendonly.aof」 AOFファイル名##677行目
  • # 常にappendfsync
  • 毎秒追加同期
  • # appendfsync なし

always: 同期永続性、データが変更されるたびに、すぐにディスクに書き込まれます ##702 行

Everysec: デフォルトで推奨、非同期で毎秒記録します (デフォルト値)

no: 同期は行わず、同期方法の決定はオペレーティング システムに委ねられます。

  • aof-load-truncated yes ##769行

問題がある可能性がある最後の命令を無視する

[root@localhost ~]#/etc/init.d/redis_6379 再起動

8. パフォーマンスの問題

(1) メモリ情報の表示

192.168.9.236:7001> 情報メモリ

使用メモリ:1210776 使用されているメモリのサイズ (バイト単位)
人間の使用メモリ:1.15MM 単位で表示されます
使用メモリRSS:7802880オペレーティング システムの観点から、redis はどれくらいのメモリを占有しますか?
使用メモリ_rss_人間:7.44M単位付き表示
最大メモリ:1073741824最大メモリサイズ
人間の最大メモリ:1.00G 単位付き表示

(2) リサイクル戦略

最大メモリポリシー:リサイクル戦略

 揮発性-lru: 許可します レディス データセット全体から最も最近使用されていないものを選択します 消去

 揮発性TTLキーの有効期限に応じて削除します 

 揮発性ランダム: 有効期限を設定して、データ収集から除外するデータをランダムに選択します。

 allkeys-lru:使用 LRU アルゴリズムはすべてのデータセットからデータを削除します。

 allkeys-ランダム: データ収集から除外するデータをランダムに選択します。

 立ち退きなし:データ消去禁止(デフォルト値)

キーの有効期限を設定する

127.0.0.1:6379>有効期限 v1 10 v1 の有効期限は 10 秒です

述べる:

いつ レディス メモリ不足のため、1 つを再利用する必要がある 時間、レディス 最初に考慮すべきことは、最も古いデータではなく、最も最近使用されていないデータをリサイクルすることです。 または有効期限が近づいています からランダムに 1 つ選択します 、データセットから削除されました