技術共有

03-NoSQL Redis の構成と最適化

2024-07-12

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

1. Redis と memcache の全体的な比較

1.パフォーマンス

Redis: 単一コアのみを使用します。各コアに小規模なデータを保存する場合、平均して、Redis は Memcached よりも高いパフォーマンスを発揮します。

Memcached: 複数のコアを使用でき、100k を超えるデータでは、Memcached のパフォーマンスが Redis よりも高くなります。

2. メモリ使用効率

MemCached: シンプルなキーと値のストレージを使用する Memcached は、メモリ使用率が高くなります。

Redis: キーと値のストレージにハッシュ構造が使用されている場合、圧縮が組み合わされているため、メモリ使用率は Memcached よりも高くなります。

3. メモリ容量とデータサイズ

MemCached: LRU アルゴリズムを使用して、最大メモリを変更できます。 Memcached の単一の Key-Value のサイズは制限されており、値は最大 1MB のみをサポートします。

Redis: VM 機能を追加し、物理メモリの制限を突破します。 Redis は、単一のキーと値の最大サイズ 512MB をサポートします。

4.データ構造のサポート

MemCached: 単一のデータ構造。データのキャッシュにのみ使用されます。

Redis: より豊富なデータ型をサポートします。Redis は、単純な k/v 型データをサポートするだけでなく、リスト、セット、zset、ハッシュなどのデータ構造のストレージも提供します。

データに対する豊富な操作をサーバー側で直接実行できるため、ネットワーク IO 時間とデータ量を削減できます。

5.信頼性

Memcached: これは、信頼性要件が低い単なるメモリ キャッシュです。 MemCached はデータの永続化をサポートしていません。停電または再起動後にデータは失われますが、安定性は保証されています。

Redis: 高い信頼性要件があり、データの永続性とデータの回復をサポートし、単一障害点を許容し、一部のパフォーマンスにも影響します。データ バックアップ、つまりマスター/スレーブ モードでのデータ バックアップをサポートします。 Redis はデータの永続化をサポートしており、メモリ内のデータをディスクに保存し、再起動時に再ロードして使用できます。

6. 応用シナリオ

Memcached: データベースの負荷を軽減し、動的システムのパフォーマンスを向上させます。キャッシュは、より多くの読み取り、より少ない書き込み、および大量のデータ量のシナリオに適しています。

Redis: 高い読み取りおよび書き込み効率、複雑なデータ処理ビジネス、および高度なセキュリティ要件を必要とするシステムに適しています。

2. 実験事例

1.redisのインストール

まずファイアウォールをオフにしてください

  1. 先把防火墙关掉
  2. systemctl stop firewalld
  3. set setenforce 0
  4. [root@localhost ~]# yum -y install gcc* zlib-devel
  5. 解压 redis包
  6. [root@localhost ~]# tar xvzf redis-4.0.9.tar.gz
  7. [root@localhost ~]# cd redis-4.0.9/
  8.  make

  1. 2:查看进程
  2. [root@localhost utils]# netstat -anpt | grep redis

  1. 3:redis服务控制
  2. [root@localhost ~]#/etc/init.d/redis_6379 stop
  3. [root@localhost ~]#/etc/init.d/redis_6379 start
  4. [root@localhost ~]#/etc/init.d/redis_6379 restart
  5. [root@localhost ~]#/etc/init.d/redis_6379 status

  1. 4.配置参数的修改
  2. [root@localhost ~]#vim /etc/redis/6379.conf
  3. bind 127.0.0.1 192.168.10.101 //监听的主机地址
  4. port 6379 //端口
  5. daemonize yes //启用守护进程
  6. pidfile /var/run/redis_6379.pid //指定 PID 文件
  7. loglevel notice //日志级别
  8. logfile /var/log/redis_6379.log //指定日志文件
  9. [root@localhost~]#/etc/init.d/redis_6379 restart
  10. [root@localhost utils]# netstat -anpt | grep redis

  1. 二:Redis 命令工具
  2.  redis-server:用于启动 Redis 的工具;
  3.  redis-benchmark:用于检测 Redis 在本机的运行效率;
  4.  redis-check-aof:修复 AOF 持久化文件;
  5.  redis-check-rdb:修复 RDB 持久化文件;
  6.  redis-cli:Redis 命令行工具。

一般的な Redis コマンド:

セット作成
ビューを取得します
キー * すべて表示
名前を変更します(上書きされます)
renamenx (同じ名前があるかどうかを確認し、rename コマンドを実行するかどうかを決定します)
del (コマンドは現在のデータベースの指定されたキーを削除できます)
存在します (コマンドはキー値が存在するかどうかを判断できます)
type (キーに対応する値の型を取得するには、type コマンドを使用します)
select (データベースの切り替え)
移動(データの移動)
lushdb (現在のデータベースデータをクリア)
flashall (すべてのデータベース データをクリア)

  1.  -p:指定服务器端口;
  2.  -s:指定服务器 socket;
  3.  -c:指定并发连接数;
  4.  -n:指定请求数;
  5.  -d:以字节的形式指定 SET/GET 值的数据大小;
  6.  -k:1=keep alive 0=reconnect;
  7.  -r:SET/GET/INCR 使用随机 key, SADD 使用随机值;
  8.  -P:通过管道传输<numreq>请求;
  9.  -q:强制退出 redis。仅显示 query/sec 值;
  10.  --csv:以 CSV 格式输出;
  11.  -l:生成循环,永久执行测试;
  12.  -t:仅运行以逗号分隔的测试命令列表;
  13.  -I:Idle 模式。仅打开 N 个 idle 连接并等待。

5: Redis の永続性

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

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

1: RDBとAOFの違い

(1) RDBとは何ですか?

デフォルトの方法

RDB 永続化は、現在のプロセス データのスナップショットを生成し、ハードディスクに保存するプロセスです。RDB 永続化をトリガーするプロセスは、手動トリガーと自動トリガーに分かれています。

トリガーメカニズム: 手動トリガーはそれぞれ save コマンドと bgsave コマンドに対応します。

save コマンド: RDB プロセスが完了するまで現在の Redis サーバーをブロックします。大量のメモリを備えたインスタンスの場合、時間のブロックが発生します。オンライン環境での使用は推奨されません。

bgsave コマンド: Redis プロセスは fork (プロセスの作成に使用される関数) 操作を実行して子プロセスを作成します。RDB 永続化プロセスは子プロセスを担当し、完了後に自動的に終了します。ブロッキングはフォークフェーズ中にのみ発生します。

(2) RDBのメリットとデメリット:

RDB の利点:

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

Redis は RDB をロードし、AOF 方式よりもはるかに高速にデータを回復します。

RDB の欠点:

RDB モードのデータは、リアルタイムの永続性/第 2 レベルの永続性を実現できません。 bgsave が実行されるたびに、子プロセスを作成するためにフォーク操作が実行されます。これは重量のある操作であり、頻繁に実行するとコストが高くなりすぎます。

RDB ファイルは特定のバイナリ形式で保存されます。Redis バージョンの進化に伴い、古いバージョンの RDB サービスが新しいバージョンの RDB 形式と互換性がないという問題が発生します。

2.AOFとは何ですか?

AOF (追加専用ファイル) 永続性: 各書き込みコマンドを独立したログに記録し、AOF ファイル内のコマンドを再実行して、再起動時にデータを復元します。 AOF の主な機能は、データの永続化に関するリアルタイムの問題を解決することです。現在、AOF は Redis の永続化の主流となっています。

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

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

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

述べる:

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

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

3: 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 つの同期方法があります。

  • appendonly yes: AOF 永続性を有効にする (デフォルトは no) ##673 行
  • appendfilename "appendonly.aof ": AOF ファイル名 ##677 行目
  • # 常にappendfsync
  • 毎秒追加同期
  • # appendfsync なし

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

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

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

  • aof-load-truncated yes ##769行

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

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

(2)AOF書き換え

解決するために AOF ファイル サイズが増加し続ける場合、ユーザーは次の宛先に報告できます。 レディス 送信 BGREWRITEAOF注文。BGREWRITEAOF コマンドは次の方法で削除されます。 AOF ファイル内のオーバーライドする冗長コマンド (リライトAOFファイル、作成 AOF ファイルサイズはできるだけ小さくしてください。

127.0.0.1:6379&gt; bgrewriteaof

バックグラウンド追加のみのファイル書き換えが開始されました

# ログがBGREWRITEAOFの場合、もし書き換え時にfsyncを追加しない「yes」に設定すると、新しい書き込み操作は fsync と同期されず、バッファーに一時的に保存されるだけになります。 , ディスク IO 操作の競合を避けるため、再書き込みが完了するまで待ってから書き込みを行ってください。 Redis のデフォルトは no です。

書き換え時にfsyncを追加しない

# 現在の AOF ファイルのサイズが、最後のログ書き換え時の AOF ファイルのサイズの 2 倍である場合、BGREWRITEAOF 操作が発生します。

自動 Aof 書き換え率 100

述べる:

100参照ファイル増加率は、最後の書き換えと比較した現在の AOF ファイルの増加率を指します。1002倍です

#Reids の初回起動時にファイル サイズが小さいために頻繁に BGREWRITEAOF が発生するのを避けるために、BGREWRITEAOF コマンドを実行するための現在の AOF ファイルの最小値。

自動 aof 書き換え最小サイズ 64 MB

6: パフォーマンス管理

1: メモリ情報を表示する

192.168.9.236:7001> 情報メモリ

used_memory:1210776 #使用されているメモリのサイズ、バイト単位で
used_memory_human:1.15M # ユニット付きディスプレイ、Mで
used_memory_rss:7802880 # オペレーティング システムの観点から、redis はどれくらいのメモリを占有しますか?
used_memory_rss_human:7.44M # ユニット付き表示
maxmemory:1073741824 # 最大メモリサイズ
maxmemory_human:1.00G # ユニット付き表示

2: リサイクル戦略

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

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

Ø 揮発性TTLによると削除の有効期限

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

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

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

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

述べる:

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

有効期限 v1 10

v1 の有効期限は 10 秒です

述べる:

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

Redis のパスワード設定

1. 設定方法

方法 1: 構成ファイル redis.conf を使用してパスワードを設定する

次のように、requirepass キーワードとそれに続くパスワードを見つけます。デフォルトではコメントアウトされています。つまり、デフォルトではパスワードは必要ありません。

  

 コメントを開いて自分のパスワードに設定し、再起動します

方法 2: 名前を付けてパスワードを設定する

redis-cli を使用して redis に接続し、次のコマンドを実行します。

config set requirepass 123456

実行完了後は再起動する必要はありません。クライアントを終了して再度ログインするときにパスワードを入力する必要があります。

2. 接続方法

1. 接続時にパスワードを入力します

[root@localhost bin]# ./redis-cli -a 123456

2. 最初に接続してからパスワードを入力します

[root@localhost bin]# ./redis-cli127.0.0.1:6379> auth 123456

3.Closeメソッド

[root@localhost bin]# ./redis-cli -a 123456 shutdown

4. 違い

1) 設定ファイルを変更して設定したパスワードは永続的に有効になりますが、コマンドを使用して設定したパスワードは一時的に有効になり、再起動すると無効になります。

2) 設定ファイルに設定したパスワードを変更するには再起動が必要です。コマンドで設定したパスワードはログアウトして再度ログインすると有効になり、再起動すると無効になります。

3) コマンドの優先度が設定ファイルの優先度より高い