LoginSignup
1
0

More than 3 years have passed since last update.

Redisサーバーでやらかした&容量削減に挑んでみた

Last updated at Posted at 2019-12-18

はじめに

大学を卒業し、エンジニアになってから二年半ほどが経ちました。
サーバーエンジニアとして仕事をしてきて、
まぁまぁやらかして
まぁまぁ大変だったRedisの話をしようと思います。

やらかし

スレーブ遅延をおこしました
アクセス障害:(´◦_◦`):

はい。

redis-cli keys "*"

なにをしたか

本番のスレーブサーバで、keysをたたきました。
keysは登録されているキーの一覧を取得するコマンドです。
本番のサービスを運用中にこれをやると、キーの数が多すぎて遅延を起こしてしまいます。

きっとその時はこんな軽い気持ちで叩いたに違いない

  1. お問合せの調査で、とあるランキングをみたいなぁ
  2. ランキングはRedisか、キーがわからん
  3. 開発サーバーだとキー名ちょっと違うしどうしよう
  4. スレーブならKeys叩いても大丈夫か

そう、こんな感じです。

ダメです。ちなみに二回くらいやりました。すみませんでした。

どうしたの?

それからは、キーの調査はこのようにやってます

  • 開発サーバーで似たキーを探す
redis-cli keys "*SeasonEvent*"
  • 本番サーバー固有の文字列があれば、それを確認する
redis-cli scan 0

とか

redis-cli monitor
  • こうすればkeysをたたかなくてもキーを特定できる!!

  • あとは特定したキーでランキングの中身をみるだけ!

容量削減

発生した問題

Redisサーバー仕様メモリ容量がいっぱいになってきた

なにをしたか

不要なキーを洗い出して、削除した
一定期間が過ぎると不要になるデータを消込するBatchを作成した
ソース内で、TTLの効果時間を設定してるとこを短くした

  • 不要なキーとは?

過去のランキングイベントのデータ
一時的なランキングのデータ
一時的なキャッシュデータ
など...

調査方法

モニターで確認してみる

redis-cli monitor

スキャンで見てみる

redis-cli scan 0

TTLが効いてるか見てみる

redis-cli ttl key名

最終的には、メンテナンス中に全部のキーリストをTextファイルに書き出しました。
個人的には、書き出したあとSCPコマンドで開発サーバーや自分のローカルに落としてきて、サーバーには残さないのが良いと思います。

結論

不要なデータが残ってないか、どう減らすか、残さないか、につきると思います。
開発したときに、将来ごみになりそうだから消込用のBatchを作っておこう。
といった気づかいができると、僕のような新人や後輩が悩むことがなくなると思います。

おまけ

redis-cli keys "*" > /tmp/redisKeys.txt
scp [オプション] コピー元 コピー先

結局これでローカルで見るのが一番楽でした。(すべて確認できるので)

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0