cache java是什么, 讓我們一起了解一下?
Cache?是一個(gè)像 Map 一樣的數(shù)據(jù)結(jié)構(gòu),它允許基于 Key 的臨時(shí)儲(chǔ)存。緩存被單個(gè)?CacheManager?擁有。
Java 的緩存 API 定義了五個(gè)核心接口:CachingProvider,CacheManager,Cache,Entry?和?ExpiryPolicy。
Java實(shí)現(xiàn)cache的基本機(jī)制是什么?
我這里說的cache不是指CPU和RAM之間的緩存,而是java應(yīng)用中間常用的緩存。最常使用的場(chǎng)合就是訪問數(shù)據(jù)庫(kù)的時(shí)候?yàn)榱颂岣咝识褂玫?cache。一般的用法就是把數(shù)據(jù)從數(shù)據(jù)庫(kù)讀到內(nèi)存,然后之后的數(shù)據(jù)訪問都從內(nèi)存來讀,從而減少對(duì)數(shù)據(jù)庫(kù)的讀取次數(shù)來提高效率。
說了這么多,Java?下到底如何實(shí)現(xiàn)Cache,希望下面的實(shí)際案例可以幫助到你。
public?class?CacheFactory?{ ???private?static?ConcurrentHashMap?caches?=?new?ConcurrentHashMap<>(); ???private?static?ScheduledExecutorService?executorService?=?Executors.newScheduledThreadPool(1); ? ???private?static?void?register(Cache?cache)?{ ??????caches.put(cache.category(),?cache); ???} ? ???private?static?void?registerAll()?{ ??????register(new?StockCache()); ???} ? ???public?static?void?init()?{ ??????registerAll(); ? ??????for?(Cache?cache?:?caches.values())?{ ?????????executorService.scheduleAtFixedRate(new?Runnable()?{ ????????????@Override ????????????public?void?run()?{ ???????????????cache.refresh(); ????????????} ?????????},?0,?cache.interval(),?TimeUnit.MILLISECONDS); ??????} ???} ? ???public?static?Cache?getCache(String?key)?{ ??????if?(caches.contains(key))?{ ?????????return?caches.get(key); ??????} ??????return?null; ???} } ? //?cache接口除了需要提供interval和refresh以外,還需要提供一個(gè)category來區(qū)分不同的Cache public?interface?Cache?{ ???/** ????*?Refresh?the?cache.?If?succeed,?return?true,?else?return?false; ????*? ????*?@return ????*/ ???boolean?refresh(); ? ???/** ????*?How?much?time?it?will?refresh?the?cache. ????*? ????*?@return ????*/ ???long?interval(); ? ???/** ????*?Cache's?category.?Each?cache?has?distinct?category. ????*? ????*?@return ????*/ ???String?category(); }
以上就是小編今天的分享了,希望可以幫助到大家。