Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Redisの特徴と活用方法について

56,188 views

Published on

2017/05/26のDB比較セミナーで使用した資料です。
NoSQLであるRedisについて説明しています。

Published in: Technology
  • There are over 16,000 woodworking plans that comes with step-by-step instructions and detailed photos, Click here to take a look ♣♣♣ http://tinyurl.com/yy9yh8fu
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here

Redisの特徴と活用方法について

  1. 1. Redisの特徴と 活用方法について 株式会社スカイディスク 大谷 祐司
  2. 2. ・株式会社スカイディスク CTO ・山口県下関出身 ・今年から福岡に移住してIoTやってます ・2児の父親です
  3. 3. 3自己紹介 マンガになりました。 雑誌に寄稿しました。 検索:大人になったらエンジニア 大谷
  4. 4. 本日はRedisについて、 特徴や事例など広くお話します。 Redisに興味を持ってもらえる きっかけになれば幸いです。
  5. 5. Redisとは
  6. 6. Redisは高速に値をRead/WriteできるNoSQLです。 ここ最近とてもメジャーになってきました。 単純なKVSとしての機能だけではなく、 様々な「便利に使える」仕組みを実装しています。
  7. 7. Githubでオープンソースとして公開されています。 BSDライセンスです。
  8. 8. Redisの歴史 2009年にSalvatore Sanfilippoというイタリアの 技術者によって開発されました。 2010年からVMWareが支援を行っています。 C言語で書かれています。
  9. 9. AWSもRedisを提供 2013年9月からAWSのElastiCacheで採用。 Memcached or Redisを選択可能です。 ElastiCache
  10. 10. Redisの特徴
  11. 11. シングルスレッド Redisはシングルスレッドで動作します。 MySQLのように複数の処理を並列で行う事は不可能です。 必然的に、全てのデータ操作は排他的になります。 Redis コマンド コマンド コマンド コマンド 1スレッドで 順番に処理
  12. 12. データベースの構造 Redis DB Key-Value Key-Value Key-Value Key-Value DB IDを指定して複数のDBを持つ事ができます。 各DBは独立してキーと値を保持できます。 Key-Value Key-Value Key-Value Key-Value
  13. 13. 高いパフォーマンス 全てのデータセットをメモリ内に読み込む 高速なデータアクセスを実現 ※メモリはHDDの数万倍早い。
  14. 14. 高いパフォーマンス 複数の操作を1回で実行可能 アプリケーション ⇔ Redis間の通信量を削減 コマンド コマンド コマンド 実行
  15. 15. データ構造のサポート ・5種類の型を値として扱う事ができる。 ・値を計算して戻す事ができる。 ※LUAスクリプティング/セット型の集合演算 複雑なデータ構造の保持や計算を Redisに任せる事が可能
  16. 16. メモリを使い果たしたら? 特定のルールに従って削除 LRUアルゴリズムなど、 5つのパターンから設定可能
  17. 17. メモリを使い果たしたら? それでもメモリを確保できないときは、 書き込みが全てエラーになります。
  18. 18. レプリケーション MASTER-SLAVEのレプリケーション構築が可能。 MASTERは複数台のSLAVEを設定できる。 MASTER SLAVE SLAVE SLAVE
  19. 19. レプリケーション Redisのレプリケーションは非同期。 Master-Slaveでデータの差分が出る事がある。 データの特性によって参照先の選択が必要。
  20. 20. データ永続化(バックアップ) ①SAVE/BGSAVE ⇒DBのフルダンプ(RDB = Redis DataBase)を作成。 SAVE/BGSAVE Redis RDB 全データ
  21. 21. データ永続化(バックアップ) ②AOF(Append Only File) ⇒コマンド実行ログ。ここからデータ復元可能。 コマンド Redis AOF コマンド
  22. 22. トランザクション 複数コマンドを纏めて実行 ・アトミックな操作の保証(他の処理をブロック) ・MULTIでトランザクション開始 ・全て実行(EXEC) or 全て未実行(DISCARD) MULTI コマンド コマンド コマンド EXEC(実行) DISCARD(未実行) or
  23. 23. Slow-Logの出力 設定の閾値よりも遅いクエリをメモリに記録。 秒数を指定してSLOWLOGコマンドを実行 遅いクエリの一覧を取得
  24. 24. コマンド実行状況の確認 MONITORコマンド実行 受け取ったコマンドを無限にダンプ (QUITコマンドで終了) コマンドの実行状況を把握できる。
  25. 25. Luaスクリプティング スクリプト言語「Lua」をRedis上で実行可能。 予めRedisにスクリプトを登録する事ができる。 高度な計算をRedisで実行可能
  26. 26. Luaスクリプティング 実行中は他のリクエストをブロックする。 時間が長い処理を行うのは危険。
  27. 27. Redis Sentinel Redisプロジェクトで開発されている管理サーバ 死活監視/通知/自動フェイルオーバーを実現 V2.4.16以降で利用可能
  28. 28. Redis-Cluster ・インスタンスのデータノード化 ・耐障害性 ・柔軟なスケーリング http://redis.io/topics/cluster-spec
  29. 29. 29 ・複数台で分散してデータを持つ(シャーディング) ・同じデータは複数台で持たない。 ・ノード毎にMaster-Slave構成が可能 (障害時はSlaveがMasterに自動で昇格) ・ノードを追加/削除した際にリシャーディンングが可能。 Redis Clusterの特徴
  30. 30. 30 ・ノードに0-16384の数字(slot)を割り振る。 ・リクエストのキーを計算して、対象のサーバを判別する。 [HASH_SLOT = CRC16(key) mod 16384] クラスタリングの概要 [slot 0-5460] [slot 5461-10922] [slot 10923-16383] ①サーバを選んで命令 ②対象のサーバを判別して命令を転送 node1 node2 node3③命令を実行して結果を返す
  31. 31. アーキテクチャ
  32. 32. Redisのアーキテクチャ Redisはイベント駆動アーキテクチャで動作。 シングルスレッドでリクエストを処理します。
  33. 33. Redisの動作イメージ 1プロセス/1スレッドで動作 Redis コマンド コマンド コマンド コマンド 1スレッドで 順番に処理
  34. 34. Redisのアーキテクチャ 1台のサーバで複数コアを活用するには? 同一サーバに複数台のRedisを立ち上げ、 別サーバとして動かす事を推奨。 http://redis.io/topics/faq RedisはCPUの1コアのみを使用します。
  35. 35. Redisのデータ型
  36. 36. Redisには5つのデータ型があります。 各データ型について紹介します。
  37. 37. 文字列型 ・全てのデータの基本となる型。 ・バイナリセーフで、どんな値でも扱える。 ・最大1Gまで扱える。 Orange
  38. 38. リスト型 ・文字列型のリスト。 ・先頭又は末尾に値の追加が可能。 ・リスト長をキャッシュして、高速に取得可能 Apple Orange Lemon Kiwi Peach 1 2 3 4 5 値を順番に保持
  39. 39. セット型 ・文字列型の順不同の集合。 ・同じメンバを重複して登録する事はできない。 ・2つのセットに集合演算が使用できる。 Apple Orange Lemon Kiwi Peach 値を順不同で保持
  40. 40. セット型の集合演算用のコマンド 積集合(SINTER) A B
  41. 41. 和集合(SUNION) セット型の集合演算用のコマンド A B
  42. 42. 差集合(SDIFF) セット型の集合演算用のコマンド A B
  43. 43. ソート済みセット型 ・文字列型の集合。 ・「スコア」の値でソートされた順位を持っている。 ・同じメンバを重複して登録する事はできない。 ・スコアの値、順位で範囲検索が可能。 Apple スコア :10 Orange スコア :30 Lemon スコア :50 Kiwi スコア :70 Peach スコア :90 1 2 3 4 5 値をスコアの大きさ順に保持
  44. 44. 同じスコアの場合の順位は? 同一順位が複数できるのではなく、 全ての値が別の順位になります。 (アスキーコード順にランク)
  45. 45. ハッシュ型 ・順番がない文字列型のフィールドと値のマップ。 ・フィールド値での検索が可能。 ・値を指定しての検索は不可能。 Apple Orange Lemon Kiwi Peach A B C DE 値とキーをセットで保持
  46. 46. 最近の バージョンアップと機能追加
  47. 47. Ver3.0リリース:2015年3月 ・ Redis Clusterへの対応。 ・ WAITコマンドの追加。 ・ LRUアルゴリズムの改善。
  48. 48. Ver3.2リリース:2016年5月 ・GEO API導入(緯度/経度でインデックス) ・Luaスクリプティングのデバッガ ・Redis Cluster強化
  49. 49. Ver4.0リリース準備中:(現時点でRC3) ・ 新しいレプリケーションの仕組み。 ・ LFUのキャッシュアルゴリズム。 →参照回数に基づくデータの維持 ・ RDBとAOFを合わせたバックアップファイル。 ・バックグラウンド処理を利用したデータ削除。
  50. 50. Redisは進化し続けています
  51. 51. Redisを使う方法
  52. 52. Cliが用意されており、 コマンドで操作が可能です。
  53. 53. 53 多くの言語やフレームワークで Redis用のライブラリが存在します。
  54. 54. AWSではElastiCacheとして利用できます。 フルマネージドで、マルチAZに対応しています。
  55. 55. 2016年10月からはRedis3.2に対応。 Clusterによるスケールアウトが可能に。
  56. 56. Elasti Cache のパフォーマンス。 15シャードで最大3.5Tのメモリを利用可能。 各シャードは秒間2,000万読み込み、 450万書き込みの性能。
  57. 57. Redisの活用事例
  58. 58. 複数サーバからネットワーク経由で利用できる Webアプリケーションのセッション たくさんのフレームワークで セッションストアとして採用されています。 expireを設定することで、セッションの自動的 な削除が可能です。
  59. 59. RDBアクセスのキャッシュ 非常に高いRead/Writeのパフォーマンス RDBのデータをキャッシュとして保持。 複雑なSQLの実行で時間がかかるとき、 パフォーマンスアップに効果を発揮します。
  60. 60. ゲームのランキングデータ User:A スコア :10 User:A スコア :50 User:A スコア :70 User:A スコア :90 1 3 4 5 ユーザランキング User:A スコア :30 プレイ結果 ソート済みセット型
  61. 61. ・「ユーザID」「スコア」をソート済みセットに登録。 ⇒スコア順のユーザランキングが生成される。 ・順位での検索、ユーザでの検索、スコアでの検索が可能。 ※RDBだとランク取得にorder_byが必要になり、処理が重い。 ゲームのランキングデータ
  62. 62. IoTデータの一時データ保存先 センサーデバイス ゲートウェイ DBNW/APP
  63. 63. 最後に
  64. 64. Redisは様々な機能をもったNoSQLです。 RDB等と組み合わせることで、パフォーマンスの高い アプリケーション構築を実現することができます。 ぜひ試してみてください。
  65. 65. 発表は以上になります。 ご清聴ありがとうございました。

×