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
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
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
カンファレンスのCFPを 試しに書いてみよう! / JavaDo32
gishi_yama
0
130
開発環境構築の共通要素:必要なものを手元に持ってきて使えるようにする/JavaDo28
gishi_yama
0
170
ドメイン層×日本語プログラミング/seb_sapporo_04
gishi_yama
1
200
Javaへの新たなHello, World / yuruchitose-04
gishi_yama
0
100
JSR381、知っていますか?Javaの画像認識APIのはなし / SC4Y23-05
gishi_yama
0
320
jPeekでのクラスの凝集度計測の試行 / mild-web-sapporo#24
gishi_yama
0
460
Github CopilotとChatGPTを使って感じた使い分けの糸口 / JavaDo #22
gishi_yama
1
1.8k
子ども向けプログラミング体験教室でのHololens2利用事例 / IoTLT#97
gishi_yama
0
160
AWS Serverless Java Container, Spring Bootで試してみた / javado22
gishi_yama
6
990
Other Decks in Technology
See All in Technology
Kiro Meetup #7 Kiro アップデート (2025/12/15〜2026/3/20)
katzueno
2
270
【社内勉強会】新年度からコーディングエージェントを使いこなす - 構造と制約で引き出すClaude Codeの実践知
nwiizo
30
14k
Even G2 クイックスタートガイド(日本語版)
vrshinobi1
0
130
AI時代のオンプレ-クラウドキャリアチェンジ考
yuu0w0yuu
0
630
SaaSに宿る21g
kanyamaguc
2
180
会社紹介資料 / Sansan Company Profile
sansan33
PRO
16
410k
ブラックボックス化したMLシステムのVertex AI移行 / mlops_community_62
visional_engineering_and_design
1
230
「お金で解決」が全てではない!大規模WebアプリのCI高速化 #phperkaigi
stefafafan
5
2.4k
Blue/Green Deployment を用いた PostgreSQL のメジャーバージョンアップ
kkato1
0
160
Network Firewall Proxyで 自前プロキシを消し去ることができるのか
gusandayo
0
120
サイボウズ 開発本部採用ピッチ / Cybozu Engineer Recruit
cybozuinsideout
PRO
10
77k
Physical AI on AWS リファレンスアーキテクチャ / Physical AI on AWS Reference Architecture
aws_shota
1
200
Featured
See All Featured
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
26
3.4k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
49
9.9k
The Illustrated Guide to Node.js - THAT Conference 2024
reverentgeek
1
320
Agile Actions for Facilitating Distributed Teams - ADO2019
mkilby
0
160
Bootstrapping a Software Product
garrettdimon
PRO
307
120k
Why Your Marketing Sucks and What You Can Do About It - Sophie Logan
marketingsoph
0
120
Self-Hosted WebAssembly Runtime for Runtime-Neutral Checkpoint/Restore in Edge–Cloud Continuum
chikuwait
0
430
<Decoding/> the Language of Devs - We Love SEO 2024
nikkihalliwell
1
170
HU Berlin: Industrial-Strength Natural Language Processing with spaCy and Prodigy
inesmontani
PRO
0
300
Exploring the relationship between traditional SERPs and Gen AI search
raygrieselhuber
PRO
2
3.8k
Build your cross-platform service in a week with App Engine
jlugia
234
18k
Designing Powerful Visuals for Engaging Learning
tmiket
1
310
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