Table Of Contents

Previous topic

Redisのクラスタリング

Next topic

接続処理

This Page

設定ファイル

単位について

メモリサイズが飛鳥となる部分では、 1k5GB4MB など、良く使われる方法で設定することができます。

1k 1,000バイト
1kb 1,024バイト
1m 1,000,000バイト
1mb 1,024 * 1,024バイト
1g 1,000,000,000バイト
1gb 1,024 * 1,024 * 1,024バイト

単位に関しては大文字、小文字の区別はしないため、 1GB1Gb1gB はどれも同じ意味になります。

起動モード設定

daemonize(yes/no)

デフォルトではRedisは通常のプログラムとして動作します。必要に応じて 'yes' を設定してください。デーモンとして動作する場合は、Redisはpidを /var/run/redis.pid に書き込みます。

daemonize no
pidfile(filename)

デーモンとして起動するときに、デフォルトではRedisはpidを /var/run/redis.pid というファイルに書き出します。この設定を変えることで、pidファイルの位置を変えることができます。

pidfile /var/run/redis.pid
port(portnumber)

コネクションを受け付けるポートを指定します。デフォルトは 6379 です。

port 6379
bind(127.0.0.1)

もし、特定の一つのインタフェースにバインドしたい場合に設定します。もし bind オプションが指定されなかった場合には、コネクションがやってきたすべてのインタフェースを listen します。

bind 127.0.0.1
timeout(N)

指定されたN秒数間、コマンドが送信されなければ、クライアントとの通信を切断します。

0 を指定するとタイムアウトが行われなくなります。

timeout 300
loglevel(level)

サーバのログの情報量を設定します。設定できる項目は次の通りです。

debug
多くの情報を出します。開発/テスト用です。
verbose
あまり重要でない情報も含めて多くの情報を出力しますが、 debug レベルよりは減ります。
notice
運用時に使用したいと思うような、適度な量のログを出力します。
warning
とても重要なメッセージや、重大なメッセージだけをログに出力します。
loglevel verbose
logfile(filename)

ログファイルの名前を指定します。 'stdout' を指定すると、Redisは標準出力にログを出力します。ただし、デーモンとして起動しているときに標準出力にログを出そうとしても、ログは /dev/null に出力されてしまうので注意してください。

logfile stdout
databases(num)

データベースの番号を設定します。デフォルトのデータベースは DB 0 です。ユーザは、 SELECT <dbid> を使うことで、コネクションごとに違うデータベースを選択することができます。この dbid には、0から、 databases - 1 まで設定できます。

databases 16

スナップショットの設定

save(seconds, changes)

データベースをディスクに保存するタイミングを設定することができます。

save <seconds> <changes>

このような設定があると、与えられた秒数経過するか、指定された回数分、書き込み命令を受け付けるとデータベースを保存します。

save 900 1
save 300 10
save 60 10000

このような設定がされると、次のようなタイミングで保存します:

  • もし最低1回、キーの変更が発生すると、900秒(15分)後
  • もし最低10回、キーの変更が発生すると、300秒(5分)後
  • もし最低10,000回、キーの変更が発生すると、60秒後

Note

save 行をすべてコメントアウトすると、保存が行われなくなります。

rdbcompression(yes/no)

.rdb データベースにダンプするときに、文字列オブジェクトをLZFを使って圧縮するかどうかを設定します。デフォルトでは 'yes' になっており、常に圧縮するようになっています。もし保存時にCPUパワーを節約したい場合は 'no' を設定してください。ただし、値やキーを圧縮すると指定した場合に比べると、データセットの大きさは大きくなります。

rdbcompression yes
dbfilename(filename)

DBをダンプするファイル名を指定します。

dbfilename dump.rdb
dir(path)

作業ディレクトリを設定します。

DBは、このディレクトリ内に、 dbfilename 設定ディレクティブで設定された名前で書き出されます。

追記専用ファイルモード もこのディレクトリ内に作成されます。

Note

この設定では、ファイル名ではなく、ディレクトリ名を設定してください。

dir ./

レプリケーションの設定

slaveof(masterip, masterport)

マスター/スレーブ間のレプリケーションの設定です。 slaveof を使うと、他のRedisサーバのコピーとなるインスタンスが作られます。この設定ファイルで設定される設定値はスレーブに限定して行われるため、マスターとは異なる間隔でDBを保存したり、別のポートでlistenしたり、といったこともできます。

slaveof 192.168.1.10 6379
masterauth(master-password)

もし、マスターサーバーがパスワードで保護されているのであれば(requirepass 設定ディレクティブが使用されている)、レプリケーション同期プロセスを開始する前に認証をパスさせることができます。もし、パスワードが異なる、この設定が行われていないなどの場合は、マスターはスレーブからのリクエストを拒絶します。

masterauth foobared

セキュリティの設定

requirepass(password)

クライアントが他のコマンドを送る前に、 AUTH を実行するように要求します。これは、Redisサーバが実行しているホストに、信頼できないホストからのアクセスがある場合に便利です。

後方互換性のためや、自分自身のためにサーバを立てている場合など、認証が必要ない場合にはコメントアウトしておいてください。

Warning

Redisはとても高速なため、性能の良いマシン上で実行している場合は、毎秒150,000回程度のパスワードチェックを行うことができます。そのため、弱いパスワードであれば簡単に突破されてしまうため、非常に強いパスワードを設定するようにしてください。

requirepass foobared

リソース制限の設定

maxclients(clientcount)

同時に接続できるクライアント数を設定します。デフォルトでは無制限になっており、Redisプロセスがオープンできる最大のファイルディスクリプタの数まで接続を許可します。 '0' を設定すると無制限になります。最大の接続数に達すると、Redisは全ての新しいコネクションを閉じ、 'max number of clients reached' エラーを送信します。

maxclients 128
maxmemory(bytes)

指定された量以上のメモリを使用しなくなります。Redisは、メモリ使用量の限界に達すると、 EXPIRE されたセットのキーを削除しようとします。キーを開放しようとします。また、少しで期限が切れそうなキーや、長い間維持されてきたキーを削除しようとします。可能であれば、フリーのリストのオブジェクトも可能であれば削除しようとします。

もしこれらがすべて失敗した場合には、 SETLPUSH などの、メモリを使用するコマンドに対してエラーを返すようになります。 GET などの読み込み専用のコマンドは引き続き処理可能です。

Warning

もしRedisを本物のDBではなく、状態の保持やキャッシュに使おうとしている場合は maxmemory を使うのは良い選択です。Redisが本当のデータベースとして使用されるのであれば、使用される記憶容量は徐々に成長していきます。長期間運用していると、大量のメモリを使用することになり、アップグレードのために時間を取る必要があるでしょう。もし限界を超えてしまうと、書き込み操作がエラーを返すようになるため、DBのデータが予期されない矛盾を含むことになるかもしれません。

maxmemory 500MB
maxmemory-policy(policy)

Redisのメモリ使用量が maxmemory に達した場合、何から削除していくのか、というのを選択します。次の5つの振る舞いから選択することができます。

volatile-lru
LRUアルゴリズムを使用し、期限切れになったセットのキーを削除します
allkeys-lru
LRCアルゴリズムに従い、どれかのキーを削除します
volatile-random
期限切れになったセットの中から、ランダムにキーを削除します
allkeys-random
どれかのキーをランダムに削除します
volatile-ttl
一番期限に近いキーから削除していきます
maxmemory-policy volatile-lru
maxmemory-samples(number)

LRCと最小TTL(生存期間)アルゴリズムは正確なアルゴリズムではなく、メモリの節約のために近似アルゴリズムになっています。そのため、チェックを行うサンプルの数を選択できるようになっています。デフォルトのRedisでは3つのキーをチェックし、その中からもっと使われたのが古いものを1つ選ぶというアルゴリズムになっています。この設定ディレクティブを使用すると、このサンプル値を変更することができます。

maxmemory-samples 3

追記専用モードの設定

appendonly(yes/no)

Redisはデフォルトでは非同期でデータセットをディスクに書き出します。もし、クラッシュした場合に最新のいくつかのデータが失われても良いのであれば、Redisの実行方法として、これがベストな方法です。もしデータが大切で、1データも失いたくないのであれば、 append_only_mode を有効にすべきです。このモードが設定されると、Redisは appendonly.aof に書き込み操作を受け取るたびにすべて記録していきます。このファイルは起動時に全データセットをメモリ内に構築していくときに読み込まれます。

もし使用したければ、非同期のダンプと、追記専用モードの両方を併用することもできます。もしダンプを止めたければ、 save 文をコメントアウトする必要があります。その場合でも、もし追記専用モードが有効になっているのであれば、Redisは起動時に、ログファイルからデータをロードしようとして、 dump.rdb ファイルを無視します。

Note

追記ログファイルが大きくなりすぎる場合には、バックグラウンドのリライト方法を確認するために、 BGREWRITEAOF をチェックしてください。

appendonly no
appendfilename(filename)

追記専用ファイルの名前です。デフォルトは appendonly.aof です。

appendfilename appendonly.aof
appendfsync(mode)

fsync() を呼び出すと、オペレーティングシステムに対して、出力バッファにデータが貯まるのを待つのではなく、データをディスクに書き出すように指示することができます。OSによっては実際にデータをディスクに書き出したり、なるべく速く書き出すようにしたりします。

Redisは次の3つのモードをサポートしています。

no
fsyncしません。データの書き出しはOSに任せます。高速です。
always
追記専用ログに書き込むたびにfsyncを行います。低速ですが安全です。
everysec
最後のfsyncから1秒経過するとfsyncを行います。上の2つの中間です。

デフォルトは、速度とデータの安全性の中庸をとった、 everysec です。もし背景を理解した上で、 no を選択しても問題ない、と感じたのであれば、それを選択してもらってもかまいません。こうすると、OSが自分の好きなタイミングで書き出しを行います。しかし、もしデータ損失について、問題ないと考えているのであれば、デフォルトの永続化モードのスナップショットの使用を考えた方が良いでしょう。その反対に非常に遅くはなりますが、 always を選択すると、 everysec よりも安全になります。

自信がないのであれば、 everysec を使用してください。

appendfsync everysec
no-appendfsync-on-rewrite(yes/no)

AOFのfsyncポリシーが alwayseverysec に設定されており、バックグラウンドのセーブ用のプロセス(バックグラウンドのセーブか、AOFのログのバックグラウンド書き込み)がディスクに対して大量のI/Oを発生していたとすると、Linuxの設定によっては、 fsync() 呼び出し時にRedisが長時間ブロックしてしまう可能性があります。現在では修正方法がないため、別スレッドの fsync 呼び出しは、同期的な書き込みの呼び出しまでブロックさせてしまいます。

このオプションを使うと、 BGSAVEBGREWRITEAOF が実行中は、メインのスレッドでは fsync() 呼び出しが行われないようになり、この問題を回避することができます。

これはつまり、他の子スレッドが保存している間は、 appendfsync none が設定されているのと同じ動作をするようになるため、利用者の視点で説明するとすれば、クラッシュした場合に、最悪のシナリオ(+デフォルトのLinuxの設定)を想定すると、最大で30秒のログが失われる可能性があるということです。

もし遅延時間の問題を持っているのであれば、 yes を設定してください。そうでない場合には、安全性の観点から no を選択して、この問題は放置するようにしてください。

no-appendfsync-on-rewrite no

仮想メモリの設定

vm-enabled(yes/no)

仮想メモリ(VM)を使用すると、実際のメモリ量よりも多くのデータセットをメモリに保持できるようになります。このため、OSがメモリページを使って行っているのと同様に、使用頻度が高いキーをメモリ上に置き、それ以外のキーをスワップファイルにスワップします。

VM機能を有効にするには、 vm-enabledyes に設定し、この下で説明する3つのVMパラメータを要求に合うようにセットします。

vm-enabled no
vm-swap-file(path)

Redisが使うスワップファイルのパスを設定します。あなたの想像通りスワップファイルは異なるRedisインスタンス間で共有することができないため、実行しようとしているRedisのプロセスごとにスワップファイルを用意しましょう。もしスワップファイルが既に使用されていると、Redisは文句を言うでしょう。

スワップファイルに対してはランダムアクセスが行われるため、スワップファイルに適したストレージはソリッドステートディスク(SSD)です。

Warning

もし共有のホスティング環境で使用しようとしているのであれば、デフォルトの /tmp 以下のパスは安全性の面で問題があります。Redisを実行しているユーザ権限でのみアクセスできるディレクトリを作成し、その場所にスワップファイルを作るように設定してください。

vm-swap-file /tmp/redis.swap
vm-max-memory(num)

使用する最大のメモリ量を指定します。もし、このメモリ容量に収まらず、スワップファイル上に十分な連続的な空間があれば、その内容はディスクにスワップされます。

vm-max-memory をゼロにすると、システムはできる限りすべての内容をスワップファイルに書き込もうとします。デフォルトではなく、自分が利用可能なRAMの最大容量を指定すると良いのですが、ある程度のマージンを取り、フリーのメモリ領域の60-80%ぐらいの量を指定すると良いでしょう。

vm-max-memory 0
vm-page-size(num)

スワップファイルはページに分けて保存されます。Redisは、オブジェクトは複数の連続したページに保存することができますが、ページを異なる種類のオブジェクトで共有することはできません。そのため、ページを大きく設定すると、小さなオブジェクトがスワップされると、大きなスペースが消費されてしまいます。もしページが小さすぎるとスワップファイル内のスペースが小さくなります(全体のスワップファイルのページ数にも同じ数を設定していたとします)。

もし、小さなオブジェクトを大量に使うのであれば、64もしくは32バイトのページサイズを使用してください。大きなオブジェクトを使う場合は、それに大路手大きなページサイズを使用してください。自信がない場合はデフォルトで使用すると良いでしょう。

vm-page-size 32
vm-pages(number)

スワップファイル内のトータルのメモリページ数を設定します。ページが使用しているかどうかのページテーブル(使用している/フリーというのをビット配列で表現)がRAM内に作成されます。8ページで1バイトのRAMを消費します。

トータルのスワップのサイズは vm-page-size × vm-pages になります。

デフォルト設定ではそれぞれ32バイト、134,217,728ページとなりますが、この時には4GBのスワップファイルが作られ、16MBのメモリがページテーブルとして使用されます。

アプリケーションごとに、適用可能な最小の値を設定すべきですが、ほとんどの状況でうまく動作するように、大きめの値がデフォルトで設定されています。

vm-pages 134217728
vm-max-threads(number)

同時に実行される、VM I/Oスレッドの最大数を設定します。このスレッドは、メモリの内容をディスクに書き出すためにエンコードしたり、ディスクから読み込んだ内容のデコードを行ったり、スワップファイルに対する読み書きを行います。物理デバイスに対して同時に読み書きの操作ため、I/Oそのものの助けにはなりませんが、大きな数をしていると、大きなオブジェクトに対するエンコード、デコードの手助けはできます。

0 を指定すると、スレッドによるI/Oを停止し、ブロッキングを行う仮想メモリ実装が使用されるようになります。

vm-max-threads 4

高度な設定

glueoutputbuf(yes/no)

一つのTCPパケットに収まる、小さな返信を送るために、小さな出力バッファを同士を繋げます。これはCPUパワーを少し消費しますが、1秒あたりに処理できるクエリーの数を増やします。もし、よく分からないのであれば、 yes を使用してください。

glueoutputbuf yes
hash-max-zipmap-entries(num)
hash-max-zipmap-value(num)

与えられた最大数の要素を持つ時に、メモリ効率を高めるために特殊な方法でハッシュがエンコードされるようになります。また、大きな要素も、この指定されたスレッショルドを超えなくなります。この設定を操作することで、この制限を設定することができます。

hash-max-zipmap-entries 64
hash-max-zipmap-value 512
activerehashing(yes/no)

100ミリ秒ごとに1ミリ秒のCPU時間を使用して、Redisのメインのハッシュテーブル(トップレベルのキーと値を保持している)の再ハッシュ化を行います。Redisが使用しているハッシュテーブルは、遅延再ハッシュが行えるような実装になっています(dict.c を参照)。ハッシュテーブルに操作を行えば行うほど、多くの再ハッシュのステップが実行されるようになっています。そのため、サーバーがアイドル状態であれば、再ハッシュは完了しません。また、ハッシュテーブルに少し多くのメモリが使用されることになります。

デフォルトでは、メインの辞書のリハッシュを行い、なるべく多くのメモリを開放するために、1秒間に10回、1ミリ秒の時間を使うようになっています。

もしよく分からない場合、もし遅延時間に対する制約が厳しく、最大で2ミリ秒の遅延が起きることが許されないような環境であれば activerehashing no を使用してください。

もし、これほど厳しい要求がなく、できる限り早くメモリを開放したい思っているのであれば、 activerehashing yes を使用してください。

activerehashing yes

インクルード

include(path)

1つ以上の設定ファイルをこの命令のある場所にインクルードします。この命令は、多くのサーバで大部分の設定は同じだが、一部分だけがサーバによって異なる、という場合に有効です。インクルードされるファイルも、また別のファイルをインクルードすることができます。

include /path/to/local.conf
include /path/to/other.conf