原创转载请注明出处:http://agilestyle.iteye.com/blog/2369544
Java缓存类型
堆缓存
使用Java堆内存来存储缓存对象。使用堆缓存的好处是没有序列化/反序列化,是最快的缓存。缺点也很没明显,当缓存的数据量很大时,GC暂时时间会变长,存储容量受限于堆空间大小。一般通过软引用/弱引用来存储缓存对象,即当堆内存不足时,可以强制回收这部分内存释放堆内存空间。一般使用堆缓存存储较热的数据。可以使用Guava Cache、Ehcache、MapDB实现
堆外缓存
即缓存数据存储在堆外内存,可以减少GC暂停时间(堆对象转移到堆外,GC扫描和移动的对象变少了),可以支持更大的缓存空间(只受机器内存大小限制,不受堆空间的影响)。但是读取数据时需要序列化/反序列化,因此会比堆缓存慢很多。可以使用Ehcache、MapDB实现
磁盘缓存
即缓存数据存储在磁盘上,在JVM重启时数据还是存在的,而堆缓存/堆外缓存数据会丢失,需要重新加载。可以使用Ehcache、MapDB实现
分布式缓存
两种模式:
单机时:存储最热的数据到堆缓存,相对热的数据到堆外缓存,不热的数据到磁盘缓存
集群时:存储最热的数据到堆缓存,相对热的数据到堆外缓存,全量数据到分布式缓存(比如Redis实现分布式缓存)
Reference
亿级流量网站架构核心技术 张开涛 著