Redisの詳細
Redisは、memcachedに似たキー値ベースのキャッシュシステムですが、より複雑なデータ構造であるリスト、セット、ソートされたセットをサポートし、永続化の機能を備えています。
値は文字列、マップ、リスト、セット、ソート済みセットのいずれかであるため、通常はデータ構造サーバーと呼ばれます。
Redisがシステム構造全体で果たす役割については、主に3つの理解があります。
1.キー値ストアは、キー値の形式で格納されたデータベースであり、MySQLに直接配置され、唯一のストレージシステムとして使用されます。
2.メモリキャッシュ:メモリにデータを格納する高速キャッシュであり、memcachdの代わりにアプリケーションとデータベース間のバッファリングを提供するために使用されます。
3.データ構造サーバーこれは、複雑なデータ構造の高速操作をセールスポイントとしてサポートし、いくつかの特別なビジネスシナリオの計算およびプレゼンテーション要件を提供します。たとえば、ランキングアプリケーション、トップ10など。
現在、より多くの人々がそれをmemcachedのアップグレードされたバージョンとして位置付け、より多くのデータ構造操作を提供しており、それはまだキャッシュです。
Redisの機能:
Redisは完全にオープンソースで無料であり、BSDプロトコルに準拠しており、高性能のKey-Valueデータベースです。
Redisおよびその他のキー値キャッシュ製品には、次の3つの特性があります。
Redisはデータの永続性をサポートしています。これにより、データをディスク上のメモリに保持し、再起動時に使用するために再度ロードできます。
Redisは単純なKey-Valueタイプのデータをサポートするだけでなく、リスト、セット、zset、ハッシュ、その他のデータ構造のストレージも提供します。
Redisは、データのバックアップ、つまりマスター/スレーブモードでのデータのバックアップをサポートしています。
Redis は他のKey-Valueストアとどう違うのですか?
Redisはより複雑なデータ構造を持ち、アトミック操作を提供します。これは、他のデータベースとは異なる進化のパスです。Redisデータ型は基本的なデータ構造に基づいており、追加の抽象化なしでプログラマーに透過的です。
Redisはメモリ内で実行されますが、ディスクに永続化できるため、データの量はハードウェアメモリを超えることはできないため、異なるデータセットを高速で読み書きする場合は、メモリを比較検討する必要があります。インメモリデータベースのもう1つの利点は、ディスク上の同じ複雑なデータ構造と比較して、メモリ内での操作が非常に簡単であるため、Redisが内部で複雑な多くのことを実行できることです。同時に、ディスクフォーマットに関しては、ランダムアクセスを必要としないため、コンパクトな方法で生成されます。
Redisの設定( redis.confの設定項目は次のとおりです
Redis設定ファイルはredisインストールディレクトリにあり、ファイル名はredis.confです。configコマンドを使用して、構成アイテムを表示または設定できます。
1. Redisはデフォルトではデーモンとして実行されません。この構成アイテムを使用して変更でき、yesを使用してデーモンを有効にします( daemonize no)。
2. Redisがデーモンとして実行されている場合、Redisはデフォルトでpidを/var/run/redis.pidファイルに書き込みます。これは、pidfile(pidfile /var/run/redis.pid)で指定できます。
3. Redisリスニングポートを指定します。デフォルトポートは6379です。6379が電話ボタンのMERZに対応する番号であり、MERZはイタリアの歌手Alessia Merzの名前から取られているため、著者はブログ投稿で6379がデフォルトポートとして選択された理由を説明しました( ポート6379)
4.バインドホストアドレス( bind 127.0.0.1)
5.クライアントが接続を閉じるまでのアイドル時間で、0と指定されている場合、関数を閉じることを意味します( タイムアウト300)
6.ログレベルを指定します。Redisは、デバッグ、詳細、通知、警告の合計4つのレベルをサポートします。デフォルトは詳細( loglevel verbose)です。
7.ロギングモード、デフォルトは標準出力です。デーモンモードで実行するようにRedisが構成され、ここでロギングモードが標準出力として構成されている場合、ログは/ dev / null(logfile stdout)に送信され ます
8.データベースの数を設定します。デフォルトのデータベースは0です。SELECT<dbid>コマンドを使用して、接続のデータベースIDを指定できます(データベース16)
9.データをデータファイルに同期する更新操作の時間と数を指定します。複数の条件を一致させることができます( <秒> <変更>を保存)
Redisのデフォルト構成ファイルには、3つの条件が用意されています。
保存900 1 保存300 10 保存60 10000
つまり、900秒(15分)で1回、300秒(5分)で10回、60秒で10,000回の変更があります。
10.ローカルデータベースに保存するときにデータを圧縮するかどうかを指定します。デフォルトはyesです。RedisはLZF圧縮を使用します。CPU時間を節約したい場合は、このオプションをオフにできますが、データベースファイルは巨大になります( rdbcompression yes)
11.ローカルデータベースファイル名を指定します。デフォルト値はdump.rdb( dbfilename dump.rdb)です。
12.ローカルデータベースストレージディレクトリ(dir ./)を指定します。
13.設定このマシンがスレーブサービスの場合、マスターサービスのIPアドレスとポートを設定します。Redisが起動すると、マスターからのデータを自動的に同期します( slaveof <masterip> <masterport>)
14.マスターサービスがパスワードで保護されている場合、スレーブサービスはマスターパスワードに接続します(masterauth <master-password>)
15. Redis接続パスワードを設定します。接続パスワードが設定されている場合、クライアントはRedisに接続するときにAUTH <password>コマンドを使用してパスワードを提供する必要があります。デフォルトでは無効になっています(requirepass foobared)
16.同時にクライアント接続の最大数を設定します。デフォルトは無制限です。Redisが同時に開くことができるクライアント接続の数は、Redisプロセスが開くことができるファイル記述子の最大数です。maxclients0を設定すると、制限がなくなります。クライアント接続の数が制限に達すると、Redisは新しい接続を閉じ、クライアントに最大数に達したというエラーメッセージをクライアントに返します( maxclients 128)
17. Redisの最大メモリ制限を指定します。Redisは起動時にデータをメモリにロードします。最大メモリに達した後、Redisは最初に期限切れまたは期限切れのキーをクリアしようとします。このメソッドが処理された後も、最大メモリに到達しています設定すると、書き込み操作は実行できなくなりますが、読み取り操作は実行できます。Redisの新しいvmメカニズムはキーをメモリに格納し、値はスワップ領域(maxmemory <bytes>)に格納され ます
18.更新操作ごとにログを記録するかどうかを指定します。Redisは、デフォルトでデータを非同期でディスクに書き込みます。これがオンになっていない場合、電源がオフになっている間、データが失われることがあります。上記の保存条件に従ってredis自体がデータファイルを同期するため、一部のデータは一定期間メモリにのみ存在します。デフォルトはno( appendonly no)です
19.更新ログファイル名を指定します。デフォルトはappendonly.aof(appendfilename appendonly.aof)です。
20.更新ログの条件を指定します。3つのオプション値があります:
no:オペレーティングシステムがデータキャッシュをディスクに同期するのを待機する(高速)
常に:更新操作ごとにfsync()を手動で呼び出してデータをディスクに書き込む(低速、セキュリティ)
everysec:1秒に1回同期することを意味します(妥協、デフォルト値) appendfsync everysec
21.仮想メモリメカニズムを有効にするかどうかを指定します。デフォルト値はnoです。簡単な説明として、VMメカニズムはデータをページに保存します。Redisはアクセス頻度の低いページ、つまりコールドデータをディスクにスワップし、ディスクは頻繁にアクセスされるページに自動的にアクセスします。メモリにスワップアウトします(RedisのVMメカニズムは後の記事で注意深く分析します)( vm-enabled no)
22.仮想メモリファイルパス。デフォルト値は/tmp/redis.swapで、複数のRedisインスタンスで共有することはできません(vm-swap-file /tmp/redis.swap)
23. vm-max-memoryより大きいすべてのデータを仮想メモリに格納します。どのように小さなvm-max-memoryを設定しても、すべてのインデックスデータはメモリに格納されます(Redisインデックスデータはキーです)。つまり、vm -max-memoryが0に設定されている場合、実際にはすべての値がディスク上に存在します。デフォルト値は0(vm-max-memory 0)です
24. Redisスワップファイルは多くのページに分割されています。1つのオブジェクトを複数のページに保存できますが、1つのページを複数のオブジェクトで共有することはできません。vm-page-sizeは、保存されたデータのサイズに応じて設定する必要があります。作成者小さなオブジェクトをたくさん保存する場合は、ページサイズを32バイトまたは64バイトに設定することをお勧めします。大きなオブジェクトと大きなオブジェクトを保存する場合は、大きなページを使用できます。わからない場合は、デフォルト値(vm-page-size 32)を使用してください。
25.スワップファイルのページ数を設定するページテーブル(ページが空いている、または使用されていることを示すビットマップ)がメモリに配置されているため、ディスク上の8ページごとに1バイトのメモリが消費されます。( VM-ページ134217728)
26.スワップファイルにアクセスするスレッドの数を設定します。マシンのコアの数を超えないようにすることをお勧めします。0に設定すると、スワップファイルに対するすべての操作がシリアルになり、遅延が長くなる可能性があります。デフォルト値は4( vm-max-threads 4)です
27.クライアントに返信するときに小さいパッケージを1つのパッケージに結合するかどうかを設定します。デフォルトはオンです( glueoutputbuf yes)。
28.特定の数を超える場合、または最大の要素が特定のクリティカルな値を超える場合は、特別なハッシュアルゴリズム(hash-max-zipmap-entries 64 hash-max-zipmap-value 512)を指定します
29.リセットハッシュをアクティブにするかどうかを指定します。デフォルトはオンです(特定の導入は、Redisハッシュアルゴリズムが導入されたときに後で導入されます)(activerehashing yes)
30.他の構成ファイルを含めるように指定します。同じホスト上の複数のRedisインスタンス間で同じ構成ファイルを使用でき、各インスタンスには固有の構成ファイルがあります( include /path/to/local.conf)
Redisコマンド
Redisコマンドは、redisサービスで操作を実行するために使用されます。主にredisサービスの管理に使用されます。redisサービスでコマンドを実行するには、redisクライアントが必要です。Redisクライアントは、前にダウンロードしたredisインストールパッケージに含まれています。
#/usr/local/src/redis-3.2.11/sr
次に、ローカルredisサービスに接続し、PING コマンドを実行 します。これは、redisサービスが開始されているかどうかを検出するために使用されます。
#./redis-cli
127.0.0.1:6379> ping
ポン
リモートの場合:
#./redis - cli - h host - p port - a password
redisサーバーの基本情報を表示します。
127.0.0.1:6379>情報
Redisデータのバックアップと復元
Saveコマンドは、現在のデータベースのバックアップを作成するために使用されます。このコマンドは、redisインストールディレクトリにdump.rdbファイルを作成します。
127.0.0.1:6379>保存
Redisの復元データ:
redisでデータを復元する必要がある場合は、バックアップファイル(dump.rdb)をredisインストールディレクトリに移動して、サービスを開始します。configコマンドを使用して、redisディレクトリを取得できます。
例:出力redisインストールディレクトリ:
127.0.0.1:6379> config get dir
1)「あなた」
2) "/usr/local/src/redis-3.2.11/src"
bgsaveを使用して、バックグラウンドで実行されるredisバックアップファイルを作成することもできます。
127 .0.0.1:6379> bgsave
Redisのセキュリティ:
redis構成ファイルを使用してパスワードパラメーターまたはコマンドの変更を設定すると、redisサービスへのクライアント接続にパスワード認証が必要になるため、redisサービスをより安全にすることができます。
クライアントログインパスワードが設定されているかどうかを確認します。
127.0.0.1:6379> config get requirepass
1)「requirepass」
2)「」
デフォルトでは、requirepassパラメータは空です。つまり、パスワードの確認なしでredisサービスに接続できます。
127.0.0.1:6379>構成セットrequirepass "runoob"
OK
パスワードを設定した後、redisサービスへのクライアント接続にはパスワード認証が必要です。それ以外の場合、コマンドは実行できません。
127.0.0.1:6379> config get requirepass
(エラー)NOAUTH認証が必要です。
再登録:
#./redis-cli -a runoob
パスワードが正しいことを確認してください
127.0.0.1:6379> auth runoob
OK
127.0.0.1:6379> config get requirepass
1)「requirepass」
2)「runoob」