Posted at

Redisのメモリ検証

More than 1 year has passed since last update.


はじめに

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