事先已经通过ehcache做好了缓存并持久化到磁盘上了,磁盘上会有ehcache-test.data和ehcache-test.index这两个文件,以后我的程序只会读取ehcache里面的数据,不会再写入了,读取数据的时候允许有多个jvm并发访问这个磁盘上的数据,这种并发访问会不会有问题。
问题二:假设磁盘上持久化了1000条数据(总数据就1000条),ehcache设置内存最大缓存100条,在使用缓存的过程中磁盘上保存的数据始终是一个全数据吗?暨1000条,还是1000-100=900条? 如果磁盘上只有900条,那么多个应用程序并发范围时不是要出问题?应该怎么办?

解决方案 »

  1.   

    第一个知道的Cache本身是对get和put操作是同步的  不过最好还是需要用synchronized用来防止瞬间大量的查询第二个感觉是1000条
    内存超过100的时候  才会被输出到磁盘中
      

  2.   

    JAVA文件读写本身是没有锁的,只读方式也不用考虑锁的问题.所以这个问题相当于多个进程访问同一个文件,如果只有一块磁盘的话,性能肯定是要有影响的.但不是程序问题吧.ehcache应该也可以设置磁盘上的数据量吧,不主动DELETE的话,磁盘上应该是
    1000.
      

  3.   

    对于第一个问题,只能说不行。如果ehcache的overflowToDisk设置成true,那么溢出数据会保存至文件,但Index文件是不会实时更新的,而是在当机的时候,保存至文件,换句话说Index文件和缓存文件是不同步的;同时缓存数据的文件缓存操作是先保存至回收空间上,这样更加剧了不同步性(共享缓存的进程)。第二个问题也是否定的,如果内存缓存有空间,新进数据是不会保存至磁盘缓存中的。好像ehcache有集群功能,这个我也不是很清楚,看看这个吧,按你的思路是行不通的。