>以下是我们初步设计的方案:
>首先设计一个Timer,然后遍历每个连接的状态,再设计一个连接池,以此来>当连接关闭之后,我们直接从连接池中删除临时数据.
连接池的开发和调试看似简单,其实是一个非常需要经验的技术,其涉及的线程和锁机制不是每个程序员都在短时间内能够掌握和精通,我已经碰到很多这样执著在连接池上的Java程序员,对此,我只能说南辕北撤。
使用现成的连接池和缓冲池技术,EJB容器都提供这两层基本机制,基本满足一般需求,对于特殊需求,可以使用一个专门外部的缓存产品。
>如何把数据储存在内存和内存如何分配这个问题上
缓存产品都提供一个接口方法,供你存入数据,缓存产品在运行时就住留在内存中,因此向缓存产品中加入数据,实际就是加入内存。
>1.客户传过来的数据如何在内存中保存
向缓存产品中加入数据,实际就是加入内存。不是每个客户传来的数据根据需要放在缓存中,缓存分Session和全局缓存,可以将每个客户传来的数据保存在自己Session缓存中,除非特殊需要,需要保存到全局缓存中。
>2.如何分辨出搜索数据的属性(类)
如何分类,取决你数据的组织形式,缓存一般由KEY和被缓存对象组成,如何建立一个树形结构依据情况,可以使用Collection实现。一般不推荐在内存组织过分复杂的数据形式。
>3.对于cache中内存是如何分区?如何查找哪个内存的分区?
你只需要关系缓存产品接口,无需了解内存,至于是如何在内存分区的,简易你研究一下JVM的垃圾回收机制,对于那些回收机制无法回收的对象实际一直存在内存中,实现了缓存。
>4.内存如何分配查找数据(即如何给连接发出命令)?
你只需知道缓存是一个HashMap,通过KEY可以搜寻到数据。
>5.内存数据库(如何做:数据如何存储?如何分类?如何排序?是否同步)
这好像一般我们做应用系统的不会去做。找一些这方面的产品
>6.搜索的数据是否在cache,如果不在又要如何去发出命令呢
不在Cache中,就从数据库中查询获取,建议你研究一下Jive的缓存体系,你应该明白Java的缓存了,我的书籍“java实用系统开发指南”也对缓存有一些专门描述。
其实,缓存最复杂的你没有提及到,就是如何保持缓存数据的新鲜性,对于一些特殊系统,如果及时新鲜性很高,又涉及多个服务器系统,例如,一个客户访问一台服务器,修改了数据,如何保证另外一台服务器中缓存的这个数据能够是修改了的数据?
Tangosol Coherence cache这方面做得不错,非常先进的。