Redis
CentOS
CentOS6.x

Redisのメモリ検証

はじめに

他の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のメモリが最大を超えた場合の挙動

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の利用方法