Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Javaユーザに伝えたいGuava Cache入門
Search
Hiroto YAMAKAWA
January 15, 2017
Technology
1.6k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Javaユーザに伝えたいGuava Cache入門
Java Do #08
https://javado.connpass.com/event/47668/
Hiroto YAMAKAWA
January 15, 2017
More Decks by Hiroto YAMAKAWA
See All by Hiroto YAMAKAWA
日本PostgreSQLユーザー会北海道支部(JPUG-Ezo)の紹介 / BEACON#01 JPUG-Ezo
gishi_yama
0
36
Javaユーザーグループ北海道(JavaDo)の紹介 / BEACON#01 JavaDo
gishi_yama
0
40
Beyond Coding: Empowering the Next Generation through Community-Supported Programming Education / CIF26
gishi_yama
0
69
1password で 開発環境の環境変数を安全に管理したい / mild-web-sap #31
gishi_yama
0
62
新しいJavaを学んで・使っていこう! / osd26do
gishi_yama
0
270
Hokkaido JUGのJCP Annual Awards授賞式 / JJUG CCC 2026 Spring LT
gishi_yama
0
110
カンファレンスのCFPを 試しに書いてみよう! / JavaDo32
gishi_yama
0
390
開発環境構築の共通要素:必要なものを手元に持ってきて使えるようにする/JavaDo28
gishi_yama
0
210
ドメイン層×日本語プログラミング/seb_sapporo_04
gishi_yama
1
240
Other Decks in Technology
See All in Technology
Browser Spec: Testing Hotwire with Ruby
takahashim
1
130
JAWS-UGグッズ職人仕事の流儀
kentapapa
0
120
Local CI × GitHub Actions
gogutan
3
230
価値について
gree_tech
PRO
0
100
Webの常識が通じないHTMLメールのダークモード
teamlab
PRO
0
130
日本語に強いオープンな大規模言語モデル「LLM-jp」
odashi
5
1.2k
初海外で注意すべきこと12選!!!安全快適なre:invent生活にするために
yuuuuuuu168
1
180
AI導入は済んだ。次は統制を作り替える番だ_AI×開発組織 Summit 2026
techtekt
PRO
0
360
AI駆動で「他アプリの音を加工できる」アプリを作った
satomasahiro2005
0
170
実体験から学ぶ分析エージェントの開発と運⽤
recruitengineers
PRO
8
2.4k
フィンテック養成勉強会#68
finengine
0
150
Rustuna: Rustによる高速なOptuna実装
pfn
PRO
0
200
Featured
See All Featured
Designing for Timeless Needs
cassininazir
1
530
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
Organizational Design Perspectives: An Ontology of Organizational Design Elements
kimpetersen
PRO
1
850
We Are The Robots
honzajavorek
0
400
SERP Conf. Vienna - Web Accessibility: Optimizing for Inclusivity and SEO
sarafernandez
2
1.6k
How to make the Groovebox
asonas
2
2.5k
GraphQLの誤解/rethinking-graphql
sonatard
75
12k
JAMstack: Web Apps at Ludicrous Speed - All Things Open 2022
reverentgeek
1
640
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
254
22k
Statistics for Hackers
jakevdp
799
230k
Collaborative Software Design: How to facilitate domain modelling decisions
baasie
1
340
Noah Learner - AI + Me: how we built a GSC Bulk Export data pipeline
techseoconnect
PRO
0
460
Transcript
!HJTIJ@ZBNB +BWBϢʔβʹ͍͑ͨ (VBWB$BDIFೖ
IUUQTDPEFSEPKPTBQQPSPDPOOQBTTDPNFWFOU
&BSMZ IUUQXXXUPPDPNTVQQPSUBQQMFOFXTIUNM জᢣᦍᣀ
όεϩέʔγϣϯγεςϜͷ։ൃʹͯ ᣪఞⷭӒҵヹ➥ᕕӒҵѬᥥ㛯ᏌҶ৵ҮԯդԧӼ Ტ༪%#ҵӳ4FMFDUҿӅӵԛԡӬӍӉҮӔҮӲҰӔҶӃӵ ȤѫԕՋԫԟՍӁӐөӵҵ
ǖ +BWBӘԕՋԫԟՍՑԌԾՑՒ (PPHMFӘ+BWB᳣⇹ՑԌԾՑՒ(VBWBӘकᮿ⥎㮣 ǖ ⼀ᇰԽԉԌՓՔԡ㮢ԛդԱञӑ⼀ᇰ㮣ӑಌਃ ǖ IUUQTHJUIVCDPNHPPHMFHVBWBXJLJ$BDIFT&YQMBJOFE ǖ NBWFO (VBWB$BDIF
EFQFOEFODZ HSPVQ*EDPNHPPHMFHVBWBHSPVQ*E BSUJGBDU*EHVBWBBSUJGBDU*E WFSTJPOWFSTJPO EFQFOEFODZ
αϯϓϧɿΩʔΛ༩͑ΔͱࣗಈతʹΩϟογϡσʔλΛੜ LoadingCache<String, Integer> randomIntCache = CacheBuilder.newBuilder() .expireAfterWrite(5, TimeUnit.SECONDS) .build(new CacheLoader<String,
Integer>() { @Override public Integer load(String key) throws Exception { return getRandomInt(); } }); HFU ǒGPPǒ ӑѬMPBE ǒGPPǒ Әᇴ✿᧠ӼǒGPPǒӒҮҰԕդӑԕՋԫԟՍӃӵѭ ⓬ᒁӉӍӉӳѬԕՋԫԟՍӁӉԌ՛ԡԧ՛ԡӼ⏺᪨Ӄӵ Integer v1 = randomIntCache.get(”foo”); ← (1) loadϝιουΛ࣮ߦ͠ɺ݁ՌΛΩϟογϡ Integer v2 = randomIntCache.get(”foo”); ← (2) (1)ͷ࣮ߦ݁Ռͱશ͘ಉ͡ΠϯελϯεΛฦ͢
LoadingCache<String, Integer> randomIntCache = CacheBuilder.newBuilder() .expireAfterWrite(5, TimeUnit.SECONDS) .build(new CacheLoader<String, Integer>()
{ @Override public Integer load(String key) throws Exception { return getRandomInt(); } }); ԕՋԫԟՍӘ⻎ᠶᦴঽӔӓ LFZ 7BMVF ԕՋԫԟՍӃӵ7BMVFྞԌ՛ԡԧ՛ԡӘ⇰ᘻᢅᴿѭ,FZӼਜӍӉⅈӑ⇰ᘻӬ൧⥎ѭ ,FZ 7BMVFәԗՑԡѭ $BDIF-PBEFSәѬ,FZҾӒӕԕՋԫԟՍӃӵ7BMVFԌ՛ԡԧ՛ԡӘ⇰ᘻᢅᴿӼఙᒐӃӵѭ ԕՋԫԟՍӘ⻎ᠶᦴঽӔӓә⹋ᡔ⼀ᇰӑҷӵѭ㮢ఙ㖟ᣪ㔿ѬԕդӘᡔӔӓ㮣 $BDIF-PEFSӼ ਜҰӒҷә -PBEJOH$BDIF αϯϓϧɿΩʔΛ༩͑ΔͱࣗಈతʹΩϟογϡσʔλΛੜ LFZ 7BMVF LFZ 7BMVF
αϯϓϧɿΩʔΛ༩͑ΔͱࣗಈతʹΩϟογϡσʔλΛੜ LoadingCache<String, Integer> randomIntCache = CacheBuilder.newBuilder() .expireAfterWrite(5, TimeUnit.SECONDS) .build(CacheLoader.from(() ->
getRandomInt())); +BWBӘMBNCEBᐛ㮢'VODUJPO 4VQQMJFS㮣ӼਜӍӐ$BDIF-PBEFSӼਃӶӵѭѫ 'VODUJPO LFZ LFZӼਜҰⅈ 4VQQMJFS LFZӼਜӹӔҮⅈ -BNCEBᐛӼਜҰ൶Ѭ&YDFQUJPOҶԡՕդҿӶӔҮӘӑѬHFU6ODIFDLFE ,FZ ӼਜҰѭ 㮢⼳✦әᒁ㈨ѭӉӊӁHFUӘӨӨӑӬහӝ௲ӁӕਦႌⅈҶᒨ⺙ӔҽӒলႌәใ㛸әᾩҮ㮣 Integer v1 = randomIntCache.getUnchecked(”foo”); ← ExceptionͷνΣοΫΛ͠ͳ͍߹ Integer v2 = randomIntCache.getUnchecked(”foo”);
ΩϟογϡͰ͖Δσʔλͷߏɿ&OUSZ ,FZԌ՛ԡԧ՛ԡ 7BMVFԌ՛ԡԧ՛ԡ Ǒ"ǒ ǑҴәӲҰǒ Ǒ#ǒ ǑҽӽӕӋәǒ Ǒ$ǒ ǑҿӲҰӔӳǒ ,FZԌ՛ԡԧ՛ԡ
7BMVFԒԾԠԏԗ ǑBǒ ǑCǒ ǑDǒ ǑFǒ ǑGǒ ǑHǒ ǑIǒ ǑJǒ ǑKǒ ,FZԌ՛ԡԧ՛ԡ㮴7BMVFԌ՛ԡԧ՛ԡӘՂԊӼԐ՛ՒӒӁӐᩈ✊ӑҷӵѭ 㮢.BQӒൺӂ㮣 ȔԐ՛Ւ
ΤϯτϦͷഁغ݅ɿ&WJDUJPO ǖ FYQJSF"GUFS8SJUF MPOHEVSBUJPO 5JNF6OJUVOJU Ԑ՛ՒӼਃᘻӁӐҵӳ⏺᪨ҿӶӵӨӑӘᦆ㖟ѭ ǖ FYQJSF"GUFS"DDFTT MPOHEVSBUJPO
5JNF6OJUVOJU Ԑ՛ՒӕᥰᒁӘԊԗԣԡҶҬӍӐҵӳ⏺᪨ҿӶӵӨӑӘᦆ㖟ѭ ǖ NBYJNVN4J[F MPOHTJ[F Ԑ՛ՒӼᛝӃӵᡔѭᛡᇰᡔলञӘԐ՛ՒᡔӕӔӵӒѬ'*'0ӑ⏺᪨ѭ ǖ NBYJNVN8FJHIU㮢MPOHTJ[F Ԑ՛ՒӼᛝӃӵᡔѭৼҵҶᛡᇰলञӘᡔӕӔӵӒѬ'*'0ӑ⏺᪨ѭ ѷৼҵѸӘ☑௲ՓդՓә8FJHIFSԒԾԠԏԗӑḉӃѭ 㮢ਦҲӚѬԕՋԫԟՍӃӵ7BMVFӘ➜൶ᡡᆻᡔѬ-JTUᡔӔӓ㮣
ΤϯτϦͷഁغ݅ɿ3FGSFTI ǖ SFGSFTI"GUFS8SJUF MPOHEVSBUJPO 5JNF6OJUVOJU Ԑ՛ՒӼਃᘻӁӐҵӳӉӕ7BMVFӼᥥӁ⍃ӃӨӑӘᦆ㖟ѭ FYQJSF9999ӒӘ㉹Ү㮴 FYQJSFәѬᦴঽӼṅӉӃӒԐ՛ՒӼ⏺᪨Ӄӵ
⏺᪨ӘҬӒѬൺӂԕդӑHFUҿӶӵӒѬ7BMVFҶṍ૨ҿӶӵӨӑ⽠ө㈆өᑻӋӕӔӵ SFGSFTIәѬԕդӕሽӁӐӁҮ7BMVFӼṍ૨ӃӵӨӑѬ൜Ү7BMVFӼ㈘Ӂ❰һӵ 㮢⽠ө㈆өᑻӋӕӁӔҮ㮣
ͦͷ΄͔ͷઃఆɿΨϕʔδίϨΫγϣϯͱͷ݉Ͷ߹͍ ǖ TPGU7BMVFT WBMVFӼ4PGU3FGFSFODFӕӃӵ ǖ XFBL,FZT ,FZӼ8FBL3FGFSFODFӕӃӵ ǖ
XFBL7BMVFT WBMVFӼ8FBL3FGFSFODFӕӃӵ ԕդӬӁҹә7BMVFӼᐹീ῍㮢($ҿӶӮӃҹ㮣ӕӃӵѭ 8FBLӒ4PGUӘ㉹ҮәতӘねᡭӔӓӕ⽟ᣀӼӴӉҮҶѬ Ԍ՛ԡԧ՛ԡҶീ῍ҿӶӔҹӔӍӉ㗖Ә($ҿӶӮӃҿӒ⢰ҲӶӚӲҮ 㮢8FBLӘᢅҶ($ҿӶӮӃҹѬ4PGUӘᢅҶԕՋԫԟՍൿҷ㮣
αϯϓϧɿࣗͰΤϯτϦΛొ͢Δ Cache<String, Integer> origCache = CacheBuilder.newBuilder() .expireAfterWrite(5, TimeUnit.SECONDS) .build(); ⧞ಌ⋵ӕ7BMVFӼՕդԱӁӔҮ$BDIFԌ՛ԧդԽԏդԡྞӘԕՋԫԟՍӼਃӴѬ
QVU LFZ 7BMVF㮣ӑѬ⧞ӑԐ՛ՒӼ⋭㑤ӃӵҽӒӬӑҷӵ &YQJSFӔӓӘ⼀ᇰӬ-PBEJOH$BDIFൺ᭦ѭ origCache.put(”foo”, 1); origCache.put(”bar”, 2); Integer v1 = origCache.getIfPresent(”foo”); $BDIF-PEFSӼਜӹӔҮӒҷә$BDIF
ΤϯτϦͷഁغɿJOWBMJEBUF $BDIF-PBEJOH$BDIFӘႁᡔӕᇴӑҷӵ ǖ JOWBMJEBUF LFZ ᛡᇰҿӶӉԕդӘԐ՛ՒӼ⏺᪨Ӄӵ ǖ JOWBMJEBUF"-- LFZT
ᛡᇰҿӶӉӐӘԕդӘԐ՛ՒӼ⏺᪨Ӄӵ ǖ JOWBMJEBUF"-- ӐӘԐ՛ՒӼ⏺᪨Ӄӵ
HFUͷछྨͱ͍͚ ǖ HFU ,LFZ -PBEJOH$BDIFӑѬLFZӕሽӃӵ7BMVFӼᒉӃӵѭ 7BMVFӘՕդԱसӕԐՑդҶ⋬⇰ӃӵӒѬ&YFDVUJPO&YDFQUJPOӼUISPXӃӵѭ ǖ HFU6ODIFDLFE ,LFZ
-PBEJOH$BDIFӑѬLFZӕሽӃӵ7BMVFӼᒉӃӵѭ HFUӒൺӂӊҶѬ$BDIF-PBEFSӑԩԏԫԗਦႌӼ⋬ӁӔҮ൶ӕਜҲӵѭ ਦ㮣$BDIF-PBEFSӑMBNCEBᐛӼਜҰᣪ ǖ HFU*G1SFTFOU 0CKFDULFZ $BDIFӑѬLFZӒӁӐᢡӕᆼཡӁӐҮӵӬӘҶҬӶӚ7BMVFӼᒉӃӵѭᾩһӶӚOVMMѭ ӇӘӥҵѬӐӘԐ՛ՒӼ.BQӒӁӐ㈘ӃBT.BQ HFU"MM1SFTFOUӔӓӬҬӵѭ
·ͱΊ (VBWB$BDIFӼਜҰӒѬᡔӑԊԿՒӕԕՋԫԟՍӘণ✵өӼ⇹ᖌӑҷӵѭ Ԑ՛Ւ㮢LFZӒWBMVFӘՂԊ㮣ҶԕՋԫԟՍҿӶѬLFZӑWBMVFӼහӝ௲Ӄѭ -PBEJOH$BDIFӑәѬLFZӕሽӃӵWBMVFӼ$BDIF-PBEFSӑ⇰ᘻӃӵѭ $BDIFӑәѬ⧞ӑLFZӕሽӃӵWBMVFӼQVUӃӵѭ FYQJSF9999 NBYJNVN9999SFGSFTI9999ӔӓӑѬ Ԑ՛ՒӘ⏺᪨ӮᥥӘᦆ㖟ӮᦴঽӼᴀӫӵҽӒҶ௲ᦸӵѭ
$BDIFӘ┣㜇Ӯ$BDIF-PBEFSӘਃӴᢅ ਦႌӘᾩ㮣ӑHFUӘᢅᴿҶႁӹӵ
αϯϓϧίʔυ IUUQTHJUIVCDPNHJTIJZBNBKBWBEP 4UBSUԗՑԡӼゼಌӁӐԾՑԎԞӑ⽇ӃӵҵѬ 0UIFS4BNQMFTԗՑԡӼಌਃҿӅӐҹӊҿҮѭ ⋬ⷭሉӘӐә➃⡣ӁӐҮӨӅӽҶѬᒁӑԝ՛ԿՓӒӁӐビӁӉҮӔӒᓤӍӐҮӨӃѭ ӨӉѬീ⢰ᡡ⃀ӘҶѬ⪙⽓ӑӃҶԛդԱਦҶӹҵӴӮӃҹ୦ᇴӁӐӨӃѭ
ࢀߟจݙ !LB[VIJSB@S+BWBӑਜҲӵԒդԿ՛ԥդԡգԕՋԫԟՍՑԌԾՑՒ IUUQEIBUFOBOFKQ,B[VIJSB !BLJSBLPZBTV㉜ೂӃӵ+BWBՑԌԾՑՒѬ(VBWB IUUQXXXBLJSBLPZBTVOFUHVBWBKBWB MJCSBSJFTFWPMWJOH !CBFMEVOH(VBWB$BDIF IUUQXXXCBFMEVOHDPNHVBWBDBDIF HPPHMF$BDIFT&YQMBJOFE IUUQTHJUIVCDPNHPPHMFHVBWBXJLJ$BDIFT&YQMBJOFE