现在的需求是这样的,需要缓存服务器中使用较为频繁的对象。缓存分两级,一种是利用缓存服务器缓存对象,先考虑使用MemCached做,这方面暂时没什么问题。另一种是在服务器中利用服务器有限的内存缓存最为常用的少数对象,由于需要管理的对象很少,所以这里不需要使用任何第三方的缓存,仅仅需要自己实现一个数据结构。现在的问题就是,这样的数据结构应该如何设计?仅仅利用一个HashMap存储可以么?

解决方案 »

  1.   

    利用HashMap完全可以,我觉得存储不是问题,自己实现的话,关键问题复杂的地方是要实现单例、修改与读取使用同步防止脏读等等这些。
      

  2.   

    LZ  可以看下  http://man.lupaworld.com/content/develop/open-open/13.htm 
    UP
      

  3.   

    自定义一个简单通用缓存可以
    对于所谓脏读建议楼主干脆不考虑,使用观察者模式等机制在缓存对象内容变化时刷新相应缓存,所谓刷新简单化最好,就是直接删除。因为是通用型的缓存最好这样,否则缓存的对象类型各种各样并可能增加,没必要细致到修改对象的哪个属性。数据层先从缓存取数、取不到去数据库取、取出来放进缓存。
    另外缓存的层次性需要主键来保证,就是hashmap的key,这个得好好规划一下。
    再有如果未来缓存对象的增长有不可预测性的话那么楼主最好要用lru算法等保证缓存容量不至于只增不减最后太大。
      

  4.   

    1.定义一个缓存对象。如:
    class MyCache {
        String cacheID ;//cache的ID
        String name ;//cache的名字
         int status;//cache的状态;0:正常;1:过期;2:作废.....
        int useCount;//cache 被使用的数量 
    }2.  在HashMap中就存储这些你定义的缓存对象
        Map<String, MyCache> caches = new HashMap<String, MyCache>();
       开始有用到的时候就把UseCount 设为1,然后再用就再+1.3.当useCount为0时,吧status置为1.这样你就能删除了。呵呵。Good Luck
      

  5.   

    谢谢了,我觉得使用LinkedHashMap更方便一点,起码不用自己实现LRU算法了
      

  6.   

    强烈建议使用ConcurrentHashMap 多线程的同步处理完全不用考虑了。好像还有个什么方法可以实现自动删除最少使用的。覆盖一个方法就可以。Core java里有提到 不过有点忘了。
      

  7.   


    我也看过,不过我得在jdk1.4下开发...我也实现了一个简单的读写锁,应用到现在的需求应该还是满足的