Imcache是一个新的Java缓存库包,它支持各种已应用至今高速缓存模型。Imcache打算通过提供管理缓存数据的方法,以加快应用程序。它提供了从小型应用到大规模应用解决方案。
maven依赖包:
|
Imcache支持堆内和堆外off-heap 缓存,也将支持分布式缓存。
使用方式:
|
源码库包下载:GitHub
Imcache是一个新的Java缓存库包,它支持各种已应用至今高速缓存模型。Imcache打算通过提供管理缓存数据的方法,以加快应用程序。它提供了从小型应用到大规模应用解决方案。
maven依赖包:
|
Imcache支持堆内和堆外off-heap 缓存,也将支持分布式缓存。
使用方式:
|
源码库包下载:GitHub
这个hazelcast相比,有何优势?
这个跟guava中的cache很类似啊!
支持堆外off-heap是其特点,这大概是hazelcast和guava没有的,而 Terrcotta BigMemory则是收费的。堆外内存突破JVM的内存限制,而且不受垃圾机制影响。
BigMemory是用来避免GC对堆的开销,从几MB或GB大。 BigMemory通过直接的ByteBuffers使用JVM进程的内存地址空间,不像其他原生Java对象接受GC管束。
堆是内存中动态分配对象居住的地方。如果使用new一个对象,它就被分配在堆内存上。这是相对于Stack,如果你有一个局部变量则它是位于Stack栈内存空间。
EHCache的 off-heap将你的对象从堆中脱离出来序列化,然后存储在一大块内存中,这就像它存储到磁盘上上一样,但它仍然在RAM中。对象在这种状态下不能直接使用,它们必须首先反序列化。也不受垃圾收集。序列化和反序列化会影响性能。(FST-serialization还是很快)。
使用堆外内存能够降低GC导致的暂停。
应用场景:
1.Session会话缓存,保存不激活的用户session,比如用户没有正常退出,我们也无法确定他会不会短时间内再回来,将其会话存到堆外内存。一旦再次登录,无需访问数据库可再次激活。
2.计算结果的缓存,大量查询的结果等,击中率比较低的都可以迁移到堆外。
由于可以使用堆外内存,是否可以考虑将CQRS的Im-Memory部分采用imcache来代替redis来实现呢,如果不考虑redis提供的其他额外机制的话...