naichi's lab

3日後の自分(他人)への書き置き

heroku redisをキャッシュ目的で使う場合は気をつけようねって話

概要

  • heroku redisの標準設定だと、古いキーは勝手に消えずメモリ使い切るとエラーする
  • redis:maxmemoryの設定を変えておこう

詳細

発生したエラーについて

unityroom.com ですけど今日のお昼ぐらいから断続的にエラー出まくってました。

f:id:naichilab:20180813203554p:plain

Redis::CommandError: OOM command not allowed when used memory > 'maxmemory'.

メモリが足りないよエラー。

maxmemory-policy

Heroku Redis | Heroku Dev Center

上記公式ドキュメント参照

  • noeviction will return errors when the memory limit is reached.
  • allkeys-lru will remove less recently used keys first.
  • volatile-lru will remove less recently used keys first that have an expiry set.
  • allkeys-random will evict random keys.
  • volatile-random will evict random keys but only those that have an expiry set.
  • volatile-ttl will only evict keys with an expiry set and a short TTL.

デフォルトだと noeviction 勝手にキーは消さず、満杯になったらエラーする

変更

  • unityroomではキャッシュ目的で使っているので、 volatile-lru に変更する
heroku redis:maxmemory -a application-name --policy volatile-lru
> heroku redis:info -a application-name
~~~
Maxmemory:          volatile-lru
~~~

ちゃんと変わってた。

変えた時間以降エラーが止まってることも確認。

ご不便おかけしてすいませんでした〜