要做一个本地缓存,需求如下:需要缓存一个list,每次http请求的时候读取的都是list里面的值,缓存定时(每天晚上10点)去查询数据库,更新这个list。如何实现?最好有详细代码参考。

解决方案 »

  1.   

    那最好不用List,而是用HashMap了。~
      

  2.   

    为什么呢?
    例如:页面需要展现一些user数据,缓存从数据库里面读取所有user放入一个list里面。你是说,不用list,用hashmap?
      

  3.   

    缓存里要用HashMap,键值对,这样好取,好用
    list数据会不好操作,而且从缓存中得到的对象本身就是一个map,用list还要转换
      

  4.   

    嗯,3楼也肯定了我的说法,。
    HashMap cache = new HashMap();
    cache.put("image1", image1);
    cache.put("image2", image2);
    cache.put("image3", image3);
    cache.put("image4", image4);
    等用到的时候,缓存就发挥作用了。Image img = (Image)cache.get(whichImage);
    img用就是了,如果是null再重新加载即可。
      

  5.   

    我用的list是排好序的,页面有分页,每次从list里面取值。
      

  6.   

    主要还是看具体的应用。如果按你的说法那搞个线程定时读取数据放到一个static List中就行了。
      

  7.   

    这样看你的数据量大不大不大的话在自己系统内定义一个全局的hashMap 然后将缓存的值存进去list每次取值都需要遍历整个容器 map定义好KEY就方便取了如果数据量大 可以考虑memcached每晚10点 你用spring的quartz 写个定时任务很容易
      

  8.   

    如果用memcached,就不是本地缓存了。用HashMap比list时间复杂度要小。HashMap是O(1)而list是O(n),肯定是越快越好,应该用HashMap
    如果存入的元素是要排好序的,TreeMap会把Key进行排序
      

  9.   


    用hashmap的键值对存储数据,键值存:IP或者User名,对应的value存:用户的信息,这样会更好读取数据,比list好多了。
      

  10.   

    我还是不太明白为什么要用map,arraylist不是实现了RandomAccess接口么,可以随机读取。