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

More Related Content

PDF
世界でいちばんわかりやすいドメイン駆動設計
PDF
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
PDF
イミュータブルデータモデル(世代編)
PPTX
世界一わかりやすいClean Architecture
PPTX
本当は恐ろしい分散システムの話
PDF
開発速度が速い #とは(LayerX社内資料)
PDF
ナレッジグラフとオントロジー
PDF
DockerとPodmanの比較
世界でいちばんわかりやすいドメイン駆動設計
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
イミュータブルデータモデル(世代編)
世界一わかりやすいClean Architecture
本当は恐ろしい分散システムの話
開発速度が速い #とは(LayerX社内資料)
ナレッジグラフとオントロジー
DockerとPodmanの比較

What's hot (20)

PDF
webエンジニアのためのはじめてのredis
PDF
例外設計における大罪
PPTX
関数型・オブジェクト指向 宗教戦争に疲れたなたに送るGo言語入門
PDF
At least onceってぶっちゃけ問題の先送りだったよね #kafkajp
PDF
コンテナ未経験新人が学ぶコンテナ技術入門
PDF
Apache Kafkaって本当に大丈夫?~故障検証のオーバービューと興味深い挙動の紹介~
PDF
Linux女子部 systemd徹底入門
PDF
マイクロにしすぎた結果がこれだよ!
PPTX
DXとかDevOpsとかのなんかいい感じのやつ 富士通TechLive
PDF
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
PDF
Docker Compose 徹底解説
PPTX
モノリスからマイクロサービスへの移行 ~ストラングラーパターンの検証~(Spring Fest 2020講演資料)
PPTX
SPAセキュリティ入門~PHP Conference Japan 2021
PPTX
分散システムについて語らせてくれ
PDF
SolrとElasticsearchを比べてみよう
PDF
いまさら聞けないselectあれこれ
PDF
TLS, HTTP/2演習
PDF
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
PDF
PostgreSQLアンチパターン
PDF
何となく勉強した気分になれるパーサ入門
webエンジニアのためのはじめてのredis
例外設計における大罪
関数型・オブジェクト指向 宗教戦争に疲れたなたに送るGo言語入門
At least onceってぶっちゃけ問題の先送りだったよね #kafkajp
コンテナ未経験新人が学ぶコンテナ技術入門
Apache Kafkaって本当に大丈夫?~故障検証のオーバービューと興味深い挙動の紹介~
Linux女子部 systemd徹底入門
マイクロにしすぎた結果がこれだよ!
DXとかDevOpsとかのなんかいい感じのやつ 富士通TechLive
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
Docker Compose 徹底解説
モノリスからマイクロサービスへの移行 ~ストラングラーパターンの検証~(Spring Fest 2020講演資料)
SPAセキュリティ入門~PHP Conference Japan 2021
分散システムについて語らせてくれ
SolrとElasticsearchを比べてみよう
いまさら聞けないselectあれこれ
TLS, HTTP/2演習
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
PostgreSQLアンチパターン
何となく勉強した気分になれるパーサ入門
Ad

Viewers also liked (20)

PPTX
SKYDISCのIoTを支えるテクノロジー
PDF
大規模Redisサーバ縮小化の戦い
PDF
OSS-DB Silver ポイント解説セミナー ~SQL編~ (PostgreSQL9.0)
PDF
Hazelcast Distributed Lock
PDF
Developing better debug_components
PDF
PDF
並行処理初心者のためのAkka入門
PDF
Redisととあるシステム
PDF
Akka ActorとAMQPでLINEのメッセージングパイプラインをリプレースした話
PPTX
NoSQL勉強会資料(2015/03/12@ヒカラボ )
PDF
リクルート流Elasticsearchの使い方
PDF
HBaseとRedisを使った100億超/日メッセージを処理するLINEのストレージ
PDF
Rubyで作るクローラー Ruby crawler
PPTX
Redis勉強会資料(2015/06 update)
PPTX
AWS Step FunctionとLambdaでディープラーニングの訓練を全自動化する
PDF
サーバーレスのアーキテクチャパターンとそれぞれの実装・テストの勘所
PDF
20170210 jawsug横浜(AWSタグ)
PPTX
Node.js×mongo dbで3年間サービス運用してみた話
PDF
サーバーレスの今とこれから
PDF
KPTの基本と、その活用法
SKYDISCのIoTを支えるテクノロジー
大規模Redisサーバ縮小化の戦い
OSS-DB Silver ポイント解説セミナー ~SQL編~ (PostgreSQL9.0)
Hazelcast Distributed Lock
Developing better debug_components
並行処理初心者のためのAkka入門
Redisととあるシステム
Akka ActorとAMQPでLINEのメッセージングパイプラインをリプレースした話
NoSQL勉強会資料(2015/03/12@ヒカラボ )
リクルート流Elasticsearchの使い方
HBaseとRedisを使った100億超/日メッセージを処理するLINEのストレージ
Rubyで作るクローラー Ruby crawler
Redis勉強会資料(2015/06 update)
AWS Step FunctionとLambdaでディープラーニングの訓練を全自動化する
サーバーレスのアーキテクチャパターンとそれぞれの実装・テストの勘所
20170210 jawsug横浜(AWSタグ)
Node.js×mongo dbで3年間サービス運用してみた話
サーバーレスの今とこれから
KPTの基本と、その活用法
Ad

Similar to Redisの特徴と活用方法について (20)

PPTX
Ruby on Rails を用いたWEBアプリケーションの開発
PPTX
JDBCでつながるSaasの世界
PDF
Drupal + Japan IT 2017
PDF
20190621_RDBMSのVIEWを使ってRailsのデータアクセスをいい感じにする【銀座Rails#10】
PDF
JPC2018[H4]マイクロソフトの Azure オープン ソース戦略とパートナー エコシステム
PDF
Size class 20150521
PPTX
フルリモート2ヶ月 やって編み出した コミュニケーションのコツ
PDF
AWS使ってみました
PDF
Dockerで開発環境をデリバる
PDF
(続) Effective SQLite for Android
PDF
Node-red 10本ノック(visual recognition apiを絡めて)
PPTX
サイボウズのオープンソースへの取り組み - OSC 2018 Osaka
PDF
Docker 再入門 2016 update
PDF
2013年08月 夏サミ2013-A5「DevOpsってどうなのよ?」
PDF
Railsで新規サービスを開発する際にやったこと
PDF
RakSulのInternal API開発で gRPCを導入した話
PDF
Adobe xdモバイルアプリとの連携利用
PPTX
ソニーでElectronアプリをリリースしてみた
PPTX
アプリ開発&チーム管理で 役立った拡張機能
PPTX
RAD Studioで始めるマルチデバイス・クロスプラットフォーム開発ワークショップ
Ruby on Rails を用いたWEBアプリケーションの開発
JDBCでつながるSaasの世界
Drupal + Japan IT 2017
20190621_RDBMSのVIEWを使ってRailsのデータアクセスをいい感じにする【銀座Rails#10】
JPC2018[H4]マイクロソフトの Azure オープン ソース戦略とパートナー エコシステム
Size class 20150521
フルリモート2ヶ月 やって編み出した コミュニケーションのコツ
AWS使ってみました
Dockerで開発環境をデリバる
(続) Effective SQLite for Android
Node-red 10本ノック(visual recognition apiを絡めて)
サイボウズのオープンソースへの取り組み - OSC 2018 Osaka
Docker 再入門 2016 update
2013年08月 夏サミ2013-A5「DevOpsってどうなのよ?」
Railsで新規サービスを開発する際にやったこと
RakSulのInternal API開発で gRPCを導入した話
Adobe xdモバイルアプリとの連携利用
ソニーでElectronアプリをリリースしてみた
アプリ開発&チーム管理で 役立った拡張機能
RAD Studioで始めるマルチデバイス・クロスプラットフォーム開発ワークショップ

More from Yuji Otani (20)

PPTX
Hack/HHVMの最新事情とメイン言語に採用した理由
PPTX
「技術のインテリジェンスを創る」をどうやって実現するか
PPTX
Why choose Hack/HHVM over PHP7
PPTX
PHP7ではなくHack/HHVMを選ぶ理由
PPTX
MariaDB+GaleraClusterの運用事例(MySQL勉強会2016-01-28)
PPTX
PHP7がリリースされたいま、 改めてHackについて考える。
PPTX
FuelPHP × HHVM サービス開発事例
PPTX
Hack言語に賭けたチームの話
PPTX
スタートアップにおける技術チームの作り方
PPTX
Go言語のフレームワークRevelの紹介とサービスにおける活用事例
PPTX
Hack+FuelPHPによるWebサービス開発
PPTX
【初心者向け】Go言語勉強会資料
PPTX
Phalcon勉強会資料
PPTX
RDBとNoSQLの上手な付き合い方(勉強会@LIG 2013/11/11)
PPTX
【基礎編】社内向けMySQL勉強会
PPTX
Nginx勉強会
PPTX
PHP基礎勉強会
PPTX
負荷分散勉強会
PPTX
NoSQL勉強会
PPTX
Php5 4勉強会
Hack/HHVMの最新事情とメイン言語に採用した理由
「技術のインテリジェンスを創る」をどうやって実現するか
Why choose Hack/HHVM over PHP7
PHP7ではなくHack/HHVMを選ぶ理由
MariaDB+GaleraClusterの運用事例(MySQL勉強会2016-01-28)
PHP7がリリースされたいま、 改めてHackについて考える。
FuelPHP × HHVM サービス開発事例
Hack言語に賭けたチームの話
スタートアップにおける技術チームの作り方
Go言語のフレームワークRevelの紹介とサービスにおける活用事例
Hack+FuelPHPによるWebサービス開発
【初心者向け】Go言語勉強会資料
Phalcon勉強会資料
RDBとNoSQLの上手な付き合い方(勉強会@LIG 2013/11/11)
【基礎編】社内向けMySQL勉強会
Nginx勉強会
PHP基礎勉強会
負荷分散勉強会
NoSQL勉強会
Php5 4勉強会

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