Submit Search
Spring Framework / Boot / Data 徹底活用 〜Spring Data Redis 編〜
7 likes
4,904 views
N
Naohiro Yoshida
2015/08/28のjsugでの発表資料
Technology
Read more
1 of 21
Download now
Downloaded 25 times
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
More Related Content
PPTX
JJUG CCC 2017 Spring Seasar2からSpringへ移行した俺たちのアプリケーションがマイクロサービスアーキテクチャへ歩み始めた
Koichi Sakata
PDF
Reactive Webアプリケーション - そしてSpring 5へ #jjug_ccc #ccc_ef3
Toshiaki Maki
PDF
会社でClojure使ってみて分かったこと
Recruit Technologies
PDF
Yahoo! JAPANのコンテンツプラットフォームを支えるSpring Cloud Streamによるマイクロサービスアーキテクチャ #jsug #sf_52
Yahoo!デベロッパーネットワーク
PDF
ビッグじゃなくても使えるSpark Streaming
chibochibo
PDF
Sbtのマルチプロジェクトはいいぞ
Yoshitaka Fujii
PPTX
Elasticsearch 5.2とJava Clientで戯れる #elasticsearchjp
Yahoo!デベロッパーネットワーク
PDF
MySQLと組み合わせて始める全文検索プロダクト"elasticsearch"
Kentaro Yoshida
JJUG CCC 2017 Spring Seasar2からSpringへ移行した俺たちのアプリケーションがマイクロサービスアーキテクチャへ歩み始めた
Koichi Sakata
Reactive Webアプリケーション - そしてSpring 5へ #jjug_ccc #ccc_ef3
Toshiaki Maki
会社でClojure使ってみて分かったこと
Recruit Technologies
Yahoo! JAPANのコンテンツプラットフォームを支えるSpring Cloud Streamによるマイクロサービスアーキテクチャ #jsug #sf_52
Yahoo!デベロッパーネットワーク
ビッグじゃなくても使えるSpark Streaming
chibochibo
Sbtのマルチプロジェクトはいいぞ
Yoshitaka Fujii
Elasticsearch 5.2とJava Clientで戯れる #elasticsearchjp
Yahoo!デベロッパーネットワーク
MySQLと組み合わせて始める全文検索プロダクト"elasticsearch"
Kentaro Yoshida
What's hot
(20)
PDF
Azure <3 Openness
Keiji Kamebuchi
PDF
Spring I/O 2016 報告 Test / Cloud / Other Popular Sessions
Takuya Iwatsuka
PPTX
データ履歴管理のためのテンポラルデータモデルとReladomoの紹介 #jjug_ccc #ccc_g3
Hiroshi Ito
PDF
Infrastructure as Codeの取り組みと改善
Takashi Honda
PDF
Spring I/O 2017 報告 ThymeleafのWebFlux対応
Takuya Iwatsuka
PDF
タイムマシン採用:明日のエンタープライズJavaの世界を予想する -Java EE7/クラウド/Docker/etc.-
Takakiyo Tanaka
PDF
Terraform Bootcamp - Azure Infrastructure as Code隊
Toru Makabe
PDF
Azure How to Learn &ゆるふわ雑談Q&A
Keiji Kamebuchi
PDF
GCP vs 他社クラウド
Hasegawa Yusuke
PDF
クラウド環境向けZabbixカスタマイズ紹介(第5回Zabbix勉強会)
Daisuke Ikeda
PPTX
Spark Streamingを使ってみた ~Twitterリアルタイムトレンドランキング~
sugiyama koki
PDF
コンテナ時代にインフラエンジニアは何をするのか
gree_tech
PDF
オンプレエンジニアがクラウドエンジニアを夢見て。じっと手を見る。
Akihiro Kuwano
PDF
Quarkus による超音速な Spring アプリケーション開発
Chihiro Ito
PPTX
Spring I/O 2015 報告
Takuya Iwatsuka
PDF
泥臭い運用から、プログラマブルインフラ構築(に行きたい)
Akihiro Kuwano
PDF
ScalaでDSP作ってみた
Jiro Hiraiwa
PDF
sbtマルチプロジェクトビルドの使いどころ
Kazuhiro Hara
PPTX
Swagger jjug ccc 2018 spring
kounan13
ODP
Zabbix study
Tomohiro Ikeda
Azure <3 Openness
Keiji Kamebuchi
Spring I/O 2016 報告 Test / Cloud / Other Popular Sessions
Takuya Iwatsuka
データ履歴管理のためのテンポラルデータモデルとReladomoの紹介 #jjug_ccc #ccc_g3
Hiroshi Ito
Infrastructure as Codeの取り組みと改善
Takashi Honda
Spring I/O 2017 報告 ThymeleafのWebFlux対応
Takuya Iwatsuka
タイムマシン採用:明日のエンタープライズJavaの世界を予想する -Java EE7/クラウド/Docker/etc.-
Takakiyo Tanaka
Terraform Bootcamp - Azure Infrastructure as Code隊
Toru Makabe
Azure How to Learn &ゆるふわ雑談Q&A
Keiji Kamebuchi
GCP vs 他社クラウド
Hasegawa Yusuke
クラウド環境向けZabbixカスタマイズ紹介(第5回Zabbix勉強会)
Daisuke Ikeda
Spark Streamingを使ってみた ~Twitterリアルタイムトレンドランキング~
sugiyama koki
コンテナ時代にインフラエンジニアは何をするのか
gree_tech
オンプレエンジニアがクラウドエンジニアを夢見て。じっと手を見る。
Akihiro Kuwano
Quarkus による超音速な Spring アプリケーション開発
Chihiro Ito
Spring I/O 2015 報告
Takuya Iwatsuka
泥臭い運用から、プログラマブルインフラ構築(に行きたい)
Akihiro Kuwano
ScalaでDSP作ってみた
Jiro Hiraiwa
sbtマルチプロジェクトビルドの使いどころ
Kazuhiro Hara
Swagger jjug ccc 2018 spring
kounan13
Zabbix study
Tomohiro Ikeda
Ad
Similar to Spring Framework / Boot / Data 徹底活用 〜Spring Data Redis 編〜
(20)
PPT
Springでdao 20070413
Funato Takashi
PPTX
Reladomo in Scala #scala_ks
Hiroshi Ito
PPTX
エンタープライズ分野での実践AngularJS
Ayumi Goto
PPTX
20170422 azure portal cli 使いこなし
Takayoshi Tanaka
PPTX
Spring data-rest-and-spring-cloud-contract
Takeshi Ogawa
PDF
データマイニング+WEB勉強会資料第6回
Naoyuki Yamada
PPT
Spring3.1概要 データアクセスとトランザクション処理
土岐 孝平
PDF
SPARQLとMashup環境 (年岡先生)
Shun Shiramatsu
PDF
Retina対応 CSSスプライトを自動化しよう sprity版(東区フロントエンド勉強会 2015年 第2回) 補足資料
Toshimichi Suekane
PDF
Head toward Java 16 (Night Seminar Edition)
Yuji Kubota
PPTX
20141017 introduce razor
do_aki
PDF
Node.js勉強会 Framework Koa
kamiyam .
PDF
React Native GUIDE
dcubeio
PDF
C base design methodology with s dx and xilinx ml
ssuser3a4b8c
PDF
scala+liftで遊ぼう
youku
PDF
9/16 Tokyo Apache Drill Meetup - drill vs sparksql
Mitsutoshi Kiuchi
PDF
Python / R で使うSAS Viya
SAS Institute Japan
PDF
[Japanese] Skinny Framework で始める Scala #jjug_ccc #ccc_r24
Kazuhiro Sera
PDF
社内勉強会資料(Varnish Module)
Iwana Chan
PPTX
Telemetryについて
tetsusat
Springでdao 20070413
Funato Takashi
Reladomo in Scala #scala_ks
Hiroshi Ito
エンタープライズ分野での実践AngularJS
Ayumi Goto
20170422 azure portal cli 使いこなし
Takayoshi Tanaka
Spring data-rest-and-spring-cloud-contract
Takeshi Ogawa
データマイニング+WEB勉強会資料第6回
Naoyuki Yamada
Spring3.1概要 データアクセスとトランザクション処理
土岐 孝平
SPARQLとMashup環境 (年岡先生)
Shun Shiramatsu
Retina対応 CSSスプライトを自動化しよう sprity版(東区フロントエンド勉強会 2015年 第2回) 補足資料
Toshimichi Suekane
Head toward Java 16 (Night Seminar Edition)
Yuji Kubota
20141017 introduce razor
do_aki
Node.js勉強会 Framework Koa
kamiyam .
React Native GUIDE
dcubeio
C base design methodology with s dx and xilinx ml
ssuser3a4b8c
scala+liftで遊ぼう
youku
9/16 Tokyo Apache Drill Meetup - drill vs sparksql
Mitsutoshi Kiuchi
Python / R で使うSAS Viya
SAS Institute Japan
[Japanese] Skinny Framework で始める Scala #jjug_ccc #ccc_r24
Kazuhiro Sera
社内勉強会資料(Varnish Module)
Iwana Chan
Telemetryについて
tetsusat
Ad
Spring Framework / Boot / Data 徹底活用 〜Spring Data Redis 編〜
1.
Spring Framework /
Boot / Data 徹底活用 August 28, 2015 Spring in Summer 夏なのにSpring ! Naohiro Yoshida Recruit Technologies Co.,Ltd. ∼Spring Data Redis 編∼
2.
自己紹介 (def me {:name
"吉田 尚弘" :job "アーキテクト" :lang ["Java" "Clojure" "Scala" "golang"] :spring-‐use {"流通系企業基幹システム" "高校生向け学習アプリAPIサーバ"})
3.
リクルートにおけるSpringへの取り組み ■ リクルートでは全社標準FWとしてSpringの採用を決定 ■ 専門部隊で検証やサイトへの適用を進めている 学んだプラクティスについては随時ブログや勉強会等で公開予定 ! ! ! ! ! ! API/バックエンド Spring Boot Spring Framework Spring
XXX 独自LIB ! フロントエンド node.js
4.
! ! ! ! ! ! ! ! ! API/バックエンド 本日の内容 Spring BootでのSpring Data
Redisの使い方と プラクティス Spring Boot Spring Framework Spring Rabbit Spring Boot Autoconfigure Spring JMS Spring Boot Actuator Spring Data Redis Spring Data Elasticsearch Spring ・・・
5.
Spring Data Redis ■ SpringでRedisを操作するためのライブラリ ■ JedisのローレベルAPIを使うのではなく利用しやすいTemplateを提供している ! @Autowired private
RedisTemplate<Object, Object> redisTemplate; ! public void access() { // value redisTemplate.opsForValue().set(key, System.currentTimeMillis()); Object value = redisWriterTemplate.opsForValue().get(key); // list redisTemplate.opsForList().rightPush(key, value); value = redisWriterTemplate.opsForList().leftPop(key); // expire Date expireAt = DateUtils.addHours(dateSupplier.get(), 1); redisTemplate.expireAt(key, expireAt); }!
6.
Spring Data Redis ∼Cache利用∼ ■ RedisCacheManagerを利用することでspring-contextのCache機構と連携可 @Configuration @EnableCaching public
class RedisConfiguration extends CachingConfigurerSupport { ! @Bean @Autowired public CacheManager cacheManager( RedisTemplate<Object,Object> redisTemplate){ RedisCacheManager manager = new RedisCacheManager(redisTemplate); ! //有効期限設定 (not required) Map<String, Long> expires = new HashMap<String, Long>(); expires.put("cache.expire.180", new Long(3 * 60)); manager.setExpires(expires); return manager; } }
7.
Spring Data Redis ∼Cache利用∼ //
RedisCacheManagerで指定したexpiresのkeyをvalue属性に // 指定することにより有効期限が設定される、expiresにないvalue属性の場合は無期限 @Override @Cacheable(value = "cache.expire.180", key = "'cache.master.seatTypes'") public List<CodeAndName> selectSeatTypes() { return selectList("sqlfilename"); } ! // この場合redisでのkeyは //「cache.master.selectRailroad/ + 引数のrailroadCode値」 @Cacheable(value = "cache.permanent.selectRailroad", key = "'cache.master.selectRailroad/' + #railroadCode") public CodeAndName selectRailroad(String railroadCode) { return selectOne("sqlfilename", railroadCode); } ■ キャッシュとして戻り値を保持したいメソッドにCachableアノテーションを定義 ■ Redisに存在しない場合のみメソッドの中身が呼び出される ■ 下のコードはSQL実行結果をキャッシュとしてRedisに乗せる例
8.
Spring Boot Application Spring
Bootで利用するには ■ spring-boot-starter-redisとspring-boot-autoconfigureを依存関係に追加するだけ ■ RedisAutoConfigurationがRedisTemplate作成する ■ とりあえず使ってみるのは非常に簡単 Jedis RedisTemplate アプリケーションコード Redis Properties RedisAuto Configuration Redis spring: data: redis: host: localhost port: 6379 pool: max-active:20 application.yml
9.
これだけでは実用には耐えられない
10.
Redisの構成の選択肢 ∼Redis Cluster∼ ■ 擬似的なMulti Master構成、最低3台のMaster
Nodeが必要 ■ データがシャーディングされNode毎に別のデータを保持 ■ 可用性をちゃんと考慮すると6台のNodeが必要 Node1 !① ⑦ ⑨ Node2 !② ③ ⑥ Node 3 !④ ⑤ ⑧ それぞれ管理しているhash slotを教え合っている Node1 Slave Node2 Slave Node3 Slave Client 1.CLUSTER HINTS 2.hash slotと nodeの対応 3.対象ノードからGET
11.
Node 1 Node
2 Node 3 Redisの構成の選択肢 ∼Redis Sentinel∼ ■ Master判定専用のプロセス(sentinel)を用いたMaster/Slave構成 ■ 複数のsentinelによる投票によりMasterが決定される(複数クラスタ管理可) ■ 多数決によるMaster障害検知なので3台は必要 Redis Master Redis Slave #1 Redis Slave #2 Sentinel1 sentinel2 sentinel3 Client 1.Master 問い合わせ 2.Master Node の場所返却 3.データSET
12.
Redisの構成の選択肢 ∼Load Balancer∼ ! Load Balancer VIP1
VIP 2 Redis Master Redis Slave #2 Redis Slave #1 ■ LBにWrite用のVIPとRead用のVIPを用意 ■ クライアントからはVIPにアクセスしノードダウン/Master昇格を意識しない ■ Master 1台 / Slave 1台でも構成可能 Client SET GET Sentinel1 sentinel2 sentinel3 Master障害検知と 昇格の1手段として バックエンドで sentinelを利用する
13.
Springから使ってみる
14.
Spring + Redis
Cluster ■ Jedis 2.7.2からRedis Clusterにも安定版のRedis 3.0.Xに対応している ■ しかし現在Spring Data RedisはRedis Clusterに対応していない
15.
Spring Boot Application Spring
+ Redis Sentinel RedisTemplate Jedis Sentinel Pool JedisConnectionFactory Jedis Pool sentinel1 sentinel2 sentinel3 Redis Master ■ JedisSentinelPoolがsentinelプロセスからMasterのHostAndPort取得 ■ MasterのHost And Portを取得してMasterに接続 全sentinelから定期的に Maserの情報を取得 Maserに対してアクセス
16.
Spring Boot Application Spring
+ Redis Sentinel Master 判定 JedisSentinelPool JedisConnectionFactory ■ 起動時にSentinelに対する専用のListenerを生成してMasterのAddrを取得 ■ SentinelからのMaster変更を検知する毎にメモリ内のMasterのAddrを変更 ■ 起動時に最低1つのsentinelにアクセスできる必要がある Master Listener Master Listener Sentinel1 Sentinel2 Sentinel3 Master Listener Sentinelに対してsubscribe処理 Master情報を受け取る Sentinel数分のMasterListenerを それぞれ別スレッドで起動。 最初にget-master-addr-by-name でsentinelから直接masterの Host/Portを取得。ここで取得で きないと無限ループ Spring Boot Applicaton起動時
17.
■ Master判定された後はsentinelから切断された場合でも暫定的に利用可 ■ Masterが切り替わった時にはWriteが失敗する ■ sentinel復旧後は自動的に再接続 Spring + Redis
Sentinel Sentinel停止 Spring Boot Application Redis Template JedisSentinelPool JedisConnectionFactory JedisPool Redis Master MasterListenerが デフォルトで5秒に 一回接続試行 Master Listener Master Listener Master Listener Sentinel1 Sentinel2 Sentinel3
18.
Spring Boot Application RedisTemplate JedisConnectionFactory JedisPool Redis Master ■ Slave用のJedisConnectionFactoryを用意する必要がある。 ■ Slaveが複数になった場合の分散や生死状態の判定は別途仕組みが必要。 JedisConnection JedisPool Redis Slave Spring
+ Redis Sentinel Slaveへのアクセス Jedis Sentinel Pool sentinel1 sentinel2 sentinel3 ReadかWriteかに よって利用する ConnectionFactory を切り替える
19.
Spring Boot Application Spring
+ VIP JedisConnectionFactory JedisPool Redis Master Redis Slave #1 Redis Slave #2 Load Balancer VIP1 VIP 2 RedisTemplate JedisConnectionFactory JedisPool ■ 死活監視やアクセス分散をLBに委譲する ■ 読取用と書込用のJedisConnectionFactoryはそれぞれ必要
20.
キャッシュ用クラスタ ■ 複数Master/Slaveのクラスタ構成もRepository層以上からは透過 ■ 将来的なRedis Clusterへの移行時の影響を低減 ■ 標準では対応していないので拡張が必要 ->
現在RTCで開発中 Spring Boot Application Master Slave #1 Slave #2 RedisTemplate JedisConnection Factory JedisConnection Factory JedisConnection Factory JedisConnection Factory Load Balancer VIP1 VIP 2 VIP 3 VIP 4 Master Slave #1 Slave #2 一時データ用クラスタ ・キーのprefixなどでクラスタ判定 ・発行コマンドでWrite/Read判定 Spring + VIP Multiple JedisConnectionFactory
21.
まとめ ■ Spring Data RedisのRedisTemplateによりRedis操作は簡単 ■ Spring
Data RedisでのRedis Clusterは直接サポートされていない ■ 実運用に耐えるRedis構成に合わせるとある程度のカスタマイズが必要
Download