Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Javaユーザに伝えたいGuava Cache入門
Search
Hiroto YAMAKAWA
January 15, 2017
Technology
0
1.5k
Javaユーザに伝えたいGuava Cache入門
Java Do #08
https://javado.connpass.com/event/47668/
Hiroto YAMAKAWA
January 15, 2017
Tweet
Share
More Decks by Hiroto YAMAKAWA
See All by Hiroto YAMAKAWA
開発環境構築の共通要素:必要なものを手元に持ってきて使えるようにする/JavaDo28
gishi_yama
0
130
ドメイン層×日本語プログラミング/seb_sapporo_04
gishi_yama
1
170
Javaへの新たなHello, World / yuruchitose-04
gishi_yama
0
68
JSR381、知っていますか?Javaの画像認識APIのはなし / SC4Y23-05
gishi_yama
0
270
jPeekでのクラスの凝集度計測の試行 / mild-web-sapporo#24
gishi_yama
0
420
Github CopilotとChatGPTを使って感じた使い分けの糸口 / JavaDo #22
gishi_yama
1
1.7k
子ども向けプログラミング体験教室でのHololens2利用事例 / IoTLT#97
gishi_yama
0
130
AWS Serverless Java Container, Spring Bootで試してみた / javado22
gishi_yama
5
880
Hololens2と 小中高プログラミング教育の利用にむけた試行 / XRMTG 2023-1-18
gishi_yama
0
350
Other Decks in Technology
See All in Technology
serverless team topology
_kensh
3
250
東京大学「Agile-X」のFPGA AIデザインハッカソンを制したソニーのAI最適化
sony
0
160
知覚とデザイン
rinchoku
1
640
AWSが好きすぎて、41歳でエンジニアになり、AAIを経由してAWSパートナー企業に入った話
yama3133
2
200
SREのキャリアから経営に近づく - Enterprise Risk Managementを基に -
shonansurvivors
1
440
マルチエージェントのチームビルディング_2025-10-25
shinoyamada
0
220
ヘンリー会社紹介資料(エンジニア向け) / company deck for engineer
henryofficial
0
420
DMMの検索システムをSolrからElasticCloudに移行した話
hmaa_ryo
0
280
プロダクト開発と社内データ活用での、BI×AIの現在地 / Data_Findy
sansan_randd
1
650
ソースを読む時の思考プロセスの例-MkDocs
sat
PRO
1
330
IBC 2025 動画技術関連レポート / IBC 2025 Report
cyberagentdevelopers
PRO
2
220
Retrospectiveを振り返ろう
nakasho
0
140
Featured
See All Featured
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
46
2.5k
The Straight Up "How To Draw Better" Workshop
denniskardys
239
140k
How To Stay Up To Date on Web Technology
chriscoyier
791
250k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
16k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
230
22k
Fashionably flexible responsive web design (full day workshop)
malarkey
407
66k
Testing 201, or: Great Expectations
jmmastey
45
7.7k
Typedesign – Prime Four
hannesfritz
42
2.8k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
285
14k
Scaling GitHub
holman
463
140k
For a Future-Friendly Web
brad_frost
180
10k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
48
9.7k
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