java hashmap 缓存
引用:http://tonysmith.iteye.com/blog/1106247
一般是采用HashMap來作為緩存的存儲結構,但Java沒有全局變量的概念,怎么保證緩存中的數據不被垃圾回收器收集,而造成數據的丟失呢? ?
? ?
? 請問一般的緩存是怎樣保證數據的獨立性(即脫離垃圾回收器)的???
做一個判斷,HashMap取不到值就到數據庫里再讀數據
?
系統第一次起來,或是第一次取數據后將數據 ?
? 保存在一個static的Map里即可,凡是緩存的東西 ?
? 總是經常用到的,所以一般是保持強引用,GC應該 ?
? 會清理
(1)jive[Jive?是一個開放的 Java 源代碼項目。其目標是建設一個開放結構的,強壯的,易于擴展的基于 JSP 的 論壇。]里面,是使用單態模式維護一個工廠實例,做為程序的入口,就是無論有多少個在線用戶,都只要從該入口進入.在這個工廠實例中,有一個緩存管理類(DatabaseCacheManager)變量,這個類有幾個公有變量,如DbUserCache(就是緩存訪問過的用戶)等.當要獲取一個user的用戶信息時,它就會先在DbUserCache中查找,如果找不到,那么就從數據庫中讀取,再放入緩存中. ?
?????
singleton模式: ?
??public ? class ? DataCache ? { ?
? ? ? ? ? protected ? static ? final ? HashMap ? map ? = ? new ? HashMap(); ? // ? Cache ? table ?
? ?
? ? ? ? ? private ? static ? final ? Object ? lock ? = ? new ? Object(); ?
? ? ? ? ? private ? DataCache() ? {} ? // ? 防止在外部實例化 ?
? ? ? ? ? public ? static ? Object ? getData(Object ? key) ? { ?
? ? ? ? ? ? ? ? ? Object ? v ? = ? map.get(key); ?
? ? ? ? ? ? ? ? ? if ? (v ? == ? null) ? { ?
? ? ? ? ? ? ? ? ? ? ? ? synchronized(lock) ? { ? ?
? ? ? ? ? ? ? ? ? ? ? ? v ? = ? map.get(key); ? ? // ? Check ? again ? to ? avoid ? re-load ?
? ? ? ? ? ? ? ? ? ? ? ? if ? (v ? == ? null) ? loadDataSource(key); ? ?
? ? ? ? ? ? ? ? ? ? ? ? v ? = ? map.get(key); ? // ? retrieves ? data. ?
? ? ? ? ? ? ? ? ? ? ? ? } ?
? ?
? ? ? ? ? ? ? ? ? } ?
? ?
? ? ? ? ? ? ? ? ? return ? v; ?
? ? ? ? ? ? ? ? ? ?
? ? ? ? ? } ?
? ? ? ? ? /* ?
? ? ? ? ? ? *Load ? data ? from ? data ? source. ?
? ? ? ? ? ? */ ?
? ? ? ? ? protected ? static ? synchronized ? void ? loadDataSource(Object ? key) ? { ?
? ? ? ? ? ? ? ? ? Object ? value ? = ? new ? Object(); ? // ? Load ? value ? from ? data ? source ?
? ? ? ? ? ? ? ? ? map.put(key, ? value); ?
? ? ? ? ? } ?
? }
轉載于:https://www.cnblogs.com/sode/archive/2012/04/23/2466113.html
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的java hashmap 缓存的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 由【说说JSON和JSONP..】博文,
- 下一篇: 推荐几个Linux命令行下性能监控小工具