とりあえず簡潔にわかりきってることだけ。
ここで記載してるのはちょっと古いバージョンの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など使用できないコマンドが多数あるので注意が必要です。