branch4 Blog

Internet development with every single possibility.

[KVS] Redis入門

| Comments

業務で少しRedisの勉強をしたので、そのメモ。


Redisとは

Redisは、KVS(Key-Value Store)の一種。
Web-site : http://redis.io/
Current stable : 2.8.8
License : BSD

特徴

  • In-memoryなのでスーパー速い
  • 5つのデータ型をValueとして格納可能
    • Strings : 基本データ。バイナリでも可。512MBまで格納可能
    • Lists : リスト構造のデータ。2^32 - 1個のデータを格納可能
    • Sets : Stringsの集合。データが重複しないことが保証される。2^32 - 1個のデータを格納可能
    • Hashes : keyに対応するvalueとして、複数のkey-valueのペアを格納可能
    • Sorted sets : Setsと似てる集合。各データがScoreという値に紐づけられている
  • Atomic処理可能
  • replicationを作成できる(master-slave構成)
    • 一度レプリが切れると、最初から全部レプリし直す(2.8で改善された)
    • slaveからmasterにリクエストがいくと、masterはプロセスをforkしてデータをファイルに出力して、slaveに転送する
    • sentinel(2.8以降に同梱)を利用して、自動フェイルオーバ機能が使える(かも)
  • 永続化も可能 2種類の方法がある。
    1. RDB Persistence
      要はスナップショット
      バックアップに最適
      ファイルサイズも小さい
      データ復旧も速い
      データロストしやすい
      バックアップには最悪、データ量の倍のメモリが必要になる
    2. AOF Persistence
      Logファイルに全更新を記録する方法
      データロストが少ない
      append-onlyのファイルなので、ファイルが壊れることも少ない
      データ復旧は、Logファイル記載のコマンドを逐次実行するため時間がかかる
      ファイルサイズが肥大しやすいが、過去のコマンドを上書きする機能を利用することでコンパクトにできる
      書き込みが多い場合、AOFが足を引っ張ることもある
  • online backupも取れる
    RDB/AOFのどちらか

運用Tips

  • maxclientsのhardlimitはkernel設定次第
  • apサーバがautoscale設定の場合、timeoutは適正値を模索する必要あり
  • single processなので、CPU使い切りたい場合は複数プロセスあげる。メモリ領域のオーバーヘッドはでかくなりそう

な、感じ。まとまってないけど。 どんな技術も使ってみないとほんとのとこはわからんねー。

Comments