はじめに
他のRedis構築に関するページは以下をご参考ください。
Redis構築のまとめ
Redisを実際に稼働させるために、メモリが最大値を超えた時にどのような挙動をするのか把握しておかなければいけない。
実際にメモリを超えさせてみたのと、設定についてまとめる。
環境
CentOS 6.8
Redis 3.2.5(当時の安定バージョン)
検証サーバのスペック(freeコマンド等で確認)
名称 | 値(KB) |
---|---|
MemTotal | 1914220 |
MemFree | 410616 |
Buffers | 230088 |
Cached | 1031656 |
SwapCached | 0 |
Active | 699296 |
Inactive | 638120 |
maxmemoryを超えたときの挙動
redis.conf内でmaxmemoryの設定を行うことができる
maxmemoryを超えたときの挙動はmaxmemory-policyの設定によって異なる
policy | maxmemoryを超えた時 | 削除対象 | 削除優先度 | 見解 |
---|---|---|---|---|
volatile-ttl | 既存の一部データが削除され、キーが追加される | 有効期限(expire)が設定されているデータ →有効期限は「ttl [ket]」で確認出来る |
有効期限が古い順 | maxmemory-sampleが設定できる →maxmemoryを超えた時に削除するキーの個数 |
volatile-lru | 既存の一部データが削除され、キーが追加される | 有効期限(expire)が設定されているデータ | 有効期限が古い順(LRUアルゴリズムに従って削除優先度を決める) | maxmemory-sampleが設定できる |
volatile-random | 既存の一部データが削除され、キーが追加される | 有効期限(expire)が設定されているデータ | ランダム | maxmemory-sampleは1らしい |
allkeys-lru | 既存の一部データが削除され、キーが追加される | 全てのキー | 有効期限が古い→期限がないキー | maxmemory-sampleが設定できる 削除対象に「キューを貯めるキー」が入ってしまうので、好ましくない(randomも同様) |
allkeys-random | 既存の一部データが削除され、キーが追加される | 全てのキー | ランダム | maxmemory-sampleは1らしい |
noeviction | 上書きされずmaxmemoryエラーが出る | 上書きされず処理が止まってしまうので好ましくない |
検証時の要件
・メモリが最大になった時にエラーで処理停止は望ましくない
・古いデータより直近の変更履歴の方が優先度が高いので古いデータを削除して新しいデータを差し込むようにしたい
上記からmaxmemory-policyには「volatile-ttl」を設定。
最大値はどれくらいか検証
検証サーバのメモリ | 2GB |
---|---|
Redisのused_memory | 1085729200(1.09GB) |
サーバの約半分のメモリを使用することができる。(その後はmaxmemoryを超えた時と同じ挙動をした)
参考ページ
Redisのメモリ使用確認方法
Redis監視/分析ツールまとめ
巨大なデータを使うRedisの運用まとめ
Redisのメモリが最大を超えた場合の挙動
maxmemory-policyに何を設定するべきか
メモリ圧縮設定について
Redis使うときは見積もりの2倍の容量が必要!?
ちなみに検証はJmeterを使用して行った
Jmeterの利用方法