redisパフォーマンスのチューニング


Redisのパフォーマンスの最適化については、主に次のいくつかの面から着手します.
  • 最初も最も重要であり、Redisに時間のかかるコマンド
  • を実行させないことを確保する.
  • pipeliningを使用して連続的に実行するコマンドを組み合わせて実行し、
  • pipeliningを使用する場合、クライアントから複数のコマンド(r)で区切られたコマンドを一度にRedisに送信するだけで、Redisはこれらのコマンドを順次実行し、各コマンドの戻りを順番に組み立てて1回返します.たとえば、
  • $ (printf "PING\r
    PING\r
    PING\r
    "; sleep 1) | nc localhost 6379 +PONG +PONG +PONG
  • オペレーティングシステムのTransparent huge pages(大メモリページ)機能をオフにする必要があります.そうしないと、redis遅延とメモリ使用の問題が発生する可能性があります.
    echo never > /sys/kernel/mm/transparent_hugepage/enabled
  • echo never > /sys/kernel/mm/transparent_hugepage/defrag
  • 仮想マシンでRedisを実行すると、仮想マシン環境に固有の遅延が発生する可能性があります../redis-cli--intrinsic-latency 100コマンドは、固有の遅延を表示します.また、Redisのパフォーマンスが要求される場合は、できるだけ物理マシンにRedisを直接配備する必要があります.
  • データ永続化ポリシーをチェック
  • は、読み書き分離機構
  • の導入を考慮する.
  • keysの代わりにscanを使用する.keysはredisの単一スレッド
  • をブロックするからである.
    クラスタスライス
    クラスタスライスを作成する理由:
  • Redisに格納データ量が多く、1台のホストの物理メモリが
  • を収容できなくなった.
  • Redisの書き込み要求の同時量は大きく、1つのRedisインスタンスは
  • をロードできない.
    上記の2つの問題が発生した場合,Redisをスライスしなければならない.Redisのスライススキームには多くの種類があり、例えば多くのRedisのクライアントが独自にスライス機能を実現しており、Twemproxyのようなエージェント方式で実現されるRedisスライススキームもある.しかし、第一選択案は、3.0バージョンでRedis公式にリリースされたRedis Clusterスライス案であるべきである.
    この文書では、Redis Clusterのインストールと導入の詳細については説明しません.Redis Clusterがもたらすメリットとデメリットについて重点的に説明します.
    Redis Clusterの能力
  • は、複数のノードに自動的にデータを分散することができる
  • .
  • アクセスキーが現在のスライス上にない場合、要求を自動的に正しいスライス
  • に転送することができる.
  • クラスタ内のノードの一部が無効になってもサービスを提供できる
  • .
    ここで、第3の点は主従レプリケーションに基づいて実現され、Redis Clusterの各データスライスは主従レプリケーションの構造を採用しており、原理は前述の主従レプリケーションと完全に一致しており、唯一の違いはRedis Sentineという追加のコンポーネントを省くことであり、Redis Clusterがスライス内部のノード監視と自動failoverを担当することである.
    Redis Clusterスライスの原理
    Redis Clusterには16384個のhash slotがあり、Redisは各keyのCRC 16を計算し、結果を16384と型取りし、そのkeyがどのhash slotに格納されるかを決定するとともに、Redis Clusterの各データスライスが担当するSlot数を指定する必要がある.Slotの割当ては任意の時点で再割当てが可能である.
    クライアントはkeyに対して読み書き操作を行う場合、Clusterのいずれかのスライスに接続することができ、操作したkeyがこのスライスが担当するSlotの範囲内でなければ、Redis Clusterは自動的に要求を正しいスライスにリダイレクトする.
    データ淘汰メカニズム
    Redisは、5つのデータ・トーナメント・ポリシーを提供します.
  • volatile-lru:LRUアルゴリズムを用いてデータの淘汰(前回の使用時間が最も早い、かつ使用回数が最も少ないkeyを淘汰)を行い、有効期間が設定key
  • のみを淘汰する.
  • allkeys-lru:LRUアルゴリズムを使用してデータの淘汰を行い、すべてのkeyを淘汰することができます
  • volatile-random:ランダムにデータを淘汰し、有効期間を設定したkey
  • のみを淘汰する
  • allkeys-random:ランダムにデータを淘汰し、すべてのkeyを淘汰することができます
  • volatile-ttl:残りの有効期間が最も短いkey
  • を淘汰する
    Redisに有効なデータ淘汰ポリシーを指定してmaxmemory設定に合わせて、メモリがいっぱいになった後に書き込みに失敗しないようにすることが望ましい.
    一般的に,推奨される戦略はvolatile−lruであり,Redisに保存されているデータの重要性を認識する.重要な場合、絶対に捨ててはいけないデータ(クラスデータの構成など)については、有効期間を設定しないと、Redisはこれらのデータを淘汰しません.比較的重要ではなく、ホットロード可能なデータ(例えば、最近ログインしたユーザ情報をキャッシュし、Redisで見つからない場合、プログラムはDBで読み出す)については、メモリが足りない場合にRedisがこのスコアを淘汰するように有効期間を設定することができます.
    構成方法:
    maxmemory-policy volatile-lru   #   noeviction,        

    参考資料https://www.cnblogs.com/276815076/p/7245333.html