Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

Redis パフォーマンス向上案 まとめ

More than 5 years have passed since last update.

とりあえず簡潔にわかりきってることだけ。
ここで記載してるのはちょっと古いバージョンのRedis2.6を使った時の記録。最新情報ではないので注意。

1キーに大量のデータを入れない

簡単にスロークエリ化する。致命傷。

スロークエリを潰す。

Redisだから速いと思った? 思った? ボリューミーなデータを1万件集めてソートしたりすると数秒のクエリが誕生するよ。死ぬよ?
ということで、SLOWLOG コマンドを使って、スロークエリを特定して潰しましょう。

インスタンスを増やして、処理を分ける。

Redisはシングルスレッドである。よって、スロークエリがあると瞬殺される。
シングルスレッドならインスタンス増やして、無理やりマルチスレッドにすればいいじゃない という強攻策。

master slave化

get系コマンドでmasterが重い! だったらslave化だ!

unix domain socketで繋ぐ

当たり前だがTCPを経由しなくなるので、TCPレイヤーの負荷が大幅に減る。

pconnect化

困ったときのpconnect。ただしやり過ぎに注意。

saveを改善

可能なら、master slave で変えたほうがいい。 slaveはsaveする意味が無いので止めてもいいと思ってる。
saveが頻繁に発生するとその度にディスクIOが発生するので重くなる。但しデメリットがあるのでご利用は計画的に。
- メリットは、ディスクIOが減る。
- デメリットはトラブル発生時にバックアップが消失しデータロストする。

timeout を改善

インターバルタイムアウトを調整する。
短すぎると勝手にコネクションが切断されるので要注意。
だが長すぎても問題なので、無制限の0にするのはやめたほうがいいと思う。参考サイト:http://d.conma.me/entry/2013/03/21/114044

プロキシを通す

コネクションが大幅に減ります。pconnect化出来ない環境でオススメ。
twemproxy が流行ってるので、これを使えばいいと思う。
デメリットとしては、multiなど使用できないコマンドが多数あるので注意が必要です。

peutes
Scala/JavaScript/PHP/Python/Erlang/C++/MVC/Java/Go/Perl 他:MySQL/memcached/Redis/emacs/IntelliJ/GCS/Gatling
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away