Redis

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

More than 3 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など使用できないコマンドが多数あるので注意が必要です。