Java缓存类型

原创转载请注明出处:http://agilestyle.iteye.com/blog/2369544

 

Java缓存类型

堆缓存

使用Java堆内存来存储缓存对象。使用堆缓存的好处是没有序列化/反序列化,是最快的缓存。缺点也很没明显,当缓存的数据量很大时,GC暂时时间会变长,存储容量受限于堆空间大小。一般通过软引用/弱引用来存储缓存对象,即当堆内存不足时,可以强制回收这部分内存释放堆内存空间。一般使用堆缓存存储较热的数据。可以使用Guava Cache、Ehcache、MapDB实现

 

堆外缓存

即缓存数据存储在堆外内存,可以减少GC暂停时间(堆对象转移到堆外,GC扫描和移动的对象变少了),可以支持更大的缓存空间(只受机器内存大小限制,不受堆空间的影响)。但是读取数据时需要序列化/反序列化,因此会比堆缓存慢很多。可以使用Ehcache、MapDB实现

 

磁盘缓存

即缓存数据存储在磁盘上,在JVM重启时数据还是存在的,而堆缓存/堆外缓存数据会丢失,需要重新加载。可以使用Ehcache、MapDB实现

 

分布式缓存

两种模式:

单机时:存储最热的数据到堆缓存,相对热的数据到堆外缓存,不热的数据到磁盘缓存

集群时:存储最热的数据到堆缓存,相对热的数据到堆外缓存,全量数据到分布式缓存(比如Redis实现分布式缓存)

 

Reference

亿级流量网站架构核心技术 张开涛 著

 

猜你喜欢

转载自agilestyle.iteye.com/blog/2369544