一、本地缓存
本地缓存即In-Memory cache:通常直接存储Object,最轻量级的缓存,速度最快,但JVM堆内存一般不大(由于JVM内存回收机制受限制),并且受到GC的控制,JVM堆内缓存数量受限制,缓存命中率也所以受到影响。
二、堆外缓存
堆外缓存,即In-process off-heap cache:典型的实现方案是terracotta的bigmemory。堆外缓存经过DirectBuffer绕过JVM直接获取os内存,须要序列化为byteArray存储,所以速度会比In memory的Object Cache速度慢。堆外缓存不受GC影响,在系统内存充足的时候能够建立足够大的缓存。但须要自行管理内存的回收、碎片整理和内存换入换出问题。
三、磁盘缓存
磁盘缓存:将缓存持久化到硬盘上,容量能够更大,但须要序列化,并且写文件IO开销很大,速度更低。能够和前两种缓存结合起来解决应用重启缓存冷启动的问题。
四、集中式/分布式缓存
集中式/分布式缓存:容量不受限制,网络通讯一般要比磁盘IO速度略快(还要取决于什么样的磁盘和网络),没有冷启动问题,须要通讯开销和序列化开销。
缓存