• 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);  

              }  

      }

  • 相关阅读:
    VirtualBox-5.0.16设置windows与ubuntu的共享文件夹
    ubuntu普通账户获取root权限的方法以及su和su -的区别
    9、redis之事务2-Jedis的八种调用方式(事务、管道、分布式)介绍
    8、redis之事务1-redis命令
    3、redis之java client环境搭建
    2、redis原生的命令操作不同数据类型
    如何用消息系统避免分布式事务
    Caffe学习系列(1):安装配置ubuntu14.04+cuda7.5+caffe+cudnn
    caffe windows学习:第一个测试程序
    caffe windows 学习第一步:编译和安装(vs2012+win 64)
  • 原文地址:https://www.cnblogs.com/sode/p/2466113.html
Copyright © 2020-2023  润新知