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

  • 14
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

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